(function (Ya, sa) {
    if (Ya.top == Ya && "undefined" == typeof Ya.ruyitao_already_running && (Ya.ruyitao_already_running = !0, !(/msie\s+([\w.]+)/.exec(Ya.navigator.userAgent.toLowerCase()) && "BackCompat" == document.compatMode))) {
        var U = {}, g, Ua, xa = U;
        xa.loadJQuery = function () {
            if (!window.jQuery || "1.4.2" > window.jQuery.fn.jquery) {
                if (!xa.jQuery) {
                    var a = U, b = window, c = void 0, d = function (j, a, E) {
                            if (E === c && 1 === j.nodeType) if (E = "data-" + a.replace(ed, "-$1").toLowerCase(), E = j.getAttribute(E), "string" == typeof E) {
                                try {
                                    E = "true" === E ? !0 : "false" ===
                                    E ? !1 : "null" === E ? null : f.isNumeric(E) ? parseFloat(E) : fd.test(E) ? f.parseJSON(E) : E
                                } catch (b) {
                                }
                                f.data(j, a, E)
                            } else E = c;
                            return E
                        }, e = function (j) {
                            for (var a in j) if (!("data" === a && f.isEmptyObject(j[a])) && "toJSON" !== a) return !1;
                            return !0
                        }, m = function (j, a, E) {
                            var b = a + "defer", c = a + "queue", d = a + "mark", e = f._data(j, b);
                            e && ("queue" === E || !f._data(j, c)) && ("mark" === E || !f._data(j, d)) && setTimeout(function () {
                                !f._data(j, c) && !f._data(j, d) && (f.removeData(j, b, !0), e.fire())
                            }, 0)
                        }, p = function () {
                            return !1
                        }, y = function () {
                            return !0
                        }, w = function (j,
                                         a, E) {
                            a = a || 0;
                            if (f.isFunction(a)) return f.grep(j, function (j, b) {
                                return !!a.call(j, b, j) === E
                            });
                            if (a.nodeType) return f.grep(j, function (j) {
                                return j === a === E
                            });
                            if ("string" == typeof a) {
                                var b = f.grep(j, function (j) {
                                    return 1 === j.nodeType
                                });
                                if (ob.test(a)) return f.filter(a, b, !E);
                                a = f.filter(a, b)
                            }
                            return f.grep(j, function (j) {
                                return 0 <= f.inArray(j, a) === E
                            })
                        }, q = function (j) {
                            var a = db.split("|"), j = j.createDocumentFragment();
                            if (j.createElement) for (; a.length;) j.createElement(a.pop());
                            return j
                        }, B = function (j, a) {
                            if (1 === a.nodeType &&
                                f.hasData(j)) {
                                var E, b, c;
                                b = f._data(j);
                                var d = f._data(a, b), e = b.events;
                                if (e) for (E in delete d.handle, d.events = {}, e) {
                                    b = 0;
                                    for (c = e[E].length; b < c; b++) f.event.add(a, E + (e[E][b].namespace ? "." : "") + e[E][b].namespace, e[E][b], e[E][b].data)
                                }
                                d.data && (d.data = f.extend({}, d.data))
                            }
                        }, ra = function (j, a) {
                            var E;
                            if (1 === a.nodeType) {
                                a.clearAttributes && a.clearAttributes();
                                a.mergeAttributes && a.mergeAttributes(j);
                                E = a.nodeName.toLowerCase();
                                if ("object" === E) a.outerHTML = j.outerHTML; else if ("input" !== E || "checkbox" !== j.type && "radio" !==
                                    j.type) if ("option" === E) a.selected = j.defaultSelected; else {
                                    if ("input" === E || "textarea" === E) a.defaultValue = j.defaultValue
                                } else j.checked && (a.defaultChecked = a.checked = j.checked), a.value !== j.value && (a.value = j.value);
                                a.removeAttribute(f.expando)
                            }
                        }, F = function (j) {
                            return "undefined" != typeof j.getElementsByTagName ? j.getElementsByTagName("*") : "undefined" != typeof j.querySelectorAll ? j.querySelectorAll("*") : []
                        }, C = function (j) {
                            if ("checkbox" === j.type || "radio" === j.type) j.defaultChecked = j.checked
                        }, H = function (j) {
                            var a =
                                (j.nodeName || "").toLowerCase();
                            "input" === a ? C(j) : "script" !== a && "undefined" != typeof j.getElementsByTagName && f.grep(j.getElementsByTagName("input"), C)
                        }, L = function (j, a) {
                            a.src ? f.ajax({
                                url: a.src,
                                async: !1,
                                dataType: "script"
                            }) : f.globalEval((a.text || a.textContent || a.innerHTML || "").replace(Ub, "/*$0*/"));
                            a.parentNode && a.parentNode.removeChild(a)
                        }, S = function (j, a, E) {
                            var b = "width" === a ? j.offsetWidth : j.offsetHeight, c = "width" === a ? pc : qc, d = 0,
                                e = c.length;
                            if (0 < b) {
                                if ("border" !== E) for (; d < e; d++) E || (b -= parseFloat(f.css(j, "padding" +
                                    c[d])) || 0), "margin" === E ? b += parseFloat(f.css(j, E + c[d])) || 0 : b -= parseFloat(f.css(j, "border" + c[d] + "Width")) || 0;
                                return b + "px"
                            }
                            b = tb(j, a, a);
                            if (0 > b || null == b) b = j.style[a] || 0;
                            b = parseFloat(b) || 0;
                            if (E) for (; d < e; d++) b += parseFloat(f.css(j, "padding" + c[d])) || 0, "padding" !== E && (b += parseFloat(f.css(j, "border" + c[d] + "Width")) || 0), "margin" === E && (b += parseFloat(f.css(j, E + c[d])) || 0);
                            return b + "px"
                        }, Zb = function (j) {
                            return function (a, E) {
                                "string" != typeof a && (E = a, a = "*");
                                if (f.isFunction(E)) for (var b = a.toLowerCase().split(Oc), c = 0,
                                                              d = b.length, e, g; c < d; c++) e = b[c], (g = /^\+/.test(e)) && (e = e.substr(1) || "*"), e = j[e] = j[e] || [], e[g ? "unshift" : "push"](E)
                            }
                        }, Q = function (j, a, E, b, f, d) {
                            f = f || a.dataTypes[0];
                            d = d || {};
                            d[f] = !0;
                            for (var f = j[f], e = 0, g = f ? f.length : 0, n = j === zc, k; e < g && (n || !k); e++) k = f[e](a, E, b), "string" == typeof k && (!n || d[k] ? k = c : (a.dataTypes.unshift(k), k = Q(j, a, E, b, k, d)));
                            return (n || !k) && !d["*"] && (k = Q(j, a, E, b, "*", d)), k
                        }, W = function (j, a) {
                            var E, b, gd = f.ajaxSettings.flatOptions || {};
                            for (E in a) a[E] !== c && ((gd[E] ? j : b || (b = {}))[E] = a[E]);
                            b && f.extend(!0, j, b)
                        },
                        T = function (j, a, E, b) {
                            if (f.isArray(a)) f.each(a, function (a, ga) {
                                E || sc.test(j) ? b(j, ga) : T(j + "[" + ("object" == typeof ga || f.isArray(ga) ? a : "") + "]", ga, E, b)
                            }); else if (!E && null != a && "object" == typeof a) for (var c in a) T(j + "[" + c + "]", a[c], E, b); else b(j, a)
                        }, ba = function () {
                            try {
                                return new b.XMLHttpRequest
                            } catch (j) {
                            }
                        }, aa = function () {
                            Jb = c
                        }, Y = function (j, a) {
                            var E = {};
                            return f.each(Pc.concat.apply([], Pc.slice(0, a)), function () {
                                E[this] = j
                            }), E
                        }, fa = function (j) {
                            if (!Ac[j]) {
                                var a = t.body, E = f("<" + j + ">").appendTo(a), b = E.css("display");
                                E.remove();
                                if ("none" === b || "" === b) {
                                    Ra || (Ra = t.createElement("iframe"), Ra.frameBorder = Ra.width = Ra.height = 0);
                                    a.appendChild(Ra);
                                    if (!ub || !Ra.createElement) ub = (Ra.contentWindow || Ra.contentDocument).document, ub.write(("CSS1Compat" === t.compatMode ? "<!doctype html>" : "") + "<html><body>"), ub.close();
                                    E = ub.createElement(j);
                                    ub.body.appendChild(E);
                                    b = f.css(E, "display");
                                    a.removeChild(Ra)
                                }
                                Ac[j] = b
                            }
                            return Ac[j]
                        }, ha = function (j) {
                            return f.isWindow(j) ? j : 9 === j.nodeType ? j.defaultView || j.parentWindow : !1
                        }, t = b.document, da = b.location, f, Qc =
                            function () {
                                if (!v.isReady) {
                                    try {
                                        t.documentElement.doScroll("left")
                                    } catch (j) {
                                        setTimeout(Qc, 1);
                                        return
                                    }
                                    v.ready()
                                }
                            }, v = function (j, a) {
                            return new v.fn.init(j, a, X)
                        }, R = b.jQuery, ea = b.$, X, K = /^(?:[^#<]*(<[\w\W]+>)[^>]*$|#([\w\-]*)$)/, sa = /\S/,
                        ca = /^\s+/, ia = /\s+$/, ta = /^<(\w+)\s*\/?>(?:<\/\1>)?$/, qa = /^[\],:{}\s]*$/,
                        I = /\\(?:["\\\/bfnrt]|u[0-9a-fA-F]{4})/g,
                        $ = /"[^"\\\n\r]*"|true|false|null|-?\d+(?:\.\d*)?(?:[eE][+\-]?\d+)?/g,
                        na = /(?:^|:|,)(?:\s*\[)+/g, n = /(webkit)[ \/]([\w.]+)/,
                        M = /(opera)(?:.*version)?[ \/]([\w.]+)/, Z =
                            /(msie) ([\w.]+)/, va = /(mozilla)(?:.*? rv:([\w.]+))?/, za = /-([a-z]|[0-9])/ig, Sa = /^-ms-/,
                        Kb = function (j, a) {
                            return (a + "").toUpperCase()
                        }, hd = b.navigator.userAgent, $b, ac, vb, id = Object.prototype.toString,
                        Bc = Object.prototype.hasOwnProperty, Cc = Array.prototype.push, Lb = Array.prototype.slice,
                        oa = String.prototype.trim, Ca = Array.prototype.indexOf, Fa = {};
                    f = (v.fn = v.prototype = {
                        constructor: v, init: function (j, a, b) {
                            var pa, f, d;
                            if (!j) return this;
                            if (j.nodeType) return this.context = this[0] = j, this.length = 1, this;
                            if ("body" === j && !a &&
                                t.body) return this.context = t, this[0] = t.body, this.selector = j, this.length = 1, this;
                            if ("string" == typeof j) {
                                "<" !== j.charAt(0) || ">" !== j.charAt(j.length - 1) || 3 > j.length ? pa = K.exec(j) : pa = [null, j, null];
                                if (pa && (pa[1] || !a)) {
                                    if (pa[1]) return a = a instanceof v ? a[0] : a, d = a ? a.ownerDocument || a : t, f = ta.exec(j), f ? v.isPlainObject(a) ? (j = [t.createElement(f[1])], v.fn.attr.call(j, a, !0)) : j = [d.createElement(f[1])] : (f = v.buildFragment([pa[1]], [d]), j = (f.cacheable ? v.clone(f.fragment) : f.fragment).childNodes), v.merge(this, j);
                                    if ((a = t.getElementById(pa[2])) &&
                                        a.parentNode) {
                                        if (a.id !== pa[2]) return b.find(j);
                                        this.length = 1;
                                        this[0] = a
                                    }
                                    return this.context = t, this.selector = j, this
                                }
                                return !a || a.jquery ? (a || b).find(j) : this.constructor(a).find(j)
                            }
                            return v.isFunction(j) ? b.ready(j) : (j.selector !== c && (this.selector = j.selector, this.context = j.context), v.makeArray(j, this))
                        }, selector: "", jquery: "1.7.1", length: 0, size: function () {
                            return this.length
                        }, toArray: function () {
                            return Lb.call(this, 0)
                        }, get: function (j) {
                            return null == j ? this.toArray() : 0 > j ? this[this.length + j] : this[j]
                        }, pushStack: function (j,
                                                a, b) {
                            var c = this.constructor();
                            return v.isArray(j) ? Cc.apply(c, j) : v.merge(c, j), c.prevObject = this, c.context = this.context, "find" === a ? c.selector = this.selector + (this.selector ? " " : "") + b : a && (c.selector = this.selector + "." + a + "(" + b + ")"), c
                        }, each: function (j, a) {
                            return v.each(this, j, a)
                        }, ready: function (j) {
                            return v.bindReady(), ac.add(j), this
                        }, eq: function (j) {
                            return j = +j, -1 === j ? this.slice(j) : this.slice(j, j + 1)
                        }, first: function () {
                            return this.eq(0)
                        }, last: function () {
                            return this.eq(-1)
                        }, slice: function () {
                            return this.pushStack(Lb.apply(this,
                                arguments), "slice", Lb.call(arguments).join(","))
                        }, map: function (j) {
                            return this.pushStack(v.map(this, function (a, b) {
                                return j.call(a, b, a)
                            }))
                        }, end: function () {
                            return this.prevObject || this.constructor(null)
                        }, push: Cc, sort: [].sort, splice: [].splice
                    }, v.fn.init.prototype = v.fn, v.extend = v.fn.extend = function () {
                        var j, a, b, f, d, e, g = arguments[0] || {}, O = 1, k = arguments.length, n = !1;
                        "boolean" == typeof g && (n = g, g = arguments[1] || {}, O = 2);
                        "object" != typeof g && !v.isFunction(g) && (g = {});
                        for (k === O && (g = this, --O); O < k; O++) if (null != (j = arguments[O])) for (a in j) b =
                            g[a], f = j[a], g !== f && (n && f && (v.isPlainObject(f) || (d = v.isArray(f))) ? (d ? (d = !1, e = b && v.isArray(b) ? b : []) : e = b && v.isPlainObject(b) ? b : {}, g[a] = v.extend(n, e, f)) : f !== c && (g[a] = f));
                        return g
                    }, v.extend({
                        noConflict: function (j) {
                            return b.$ === v && (b.$ = ea), j && b.jQuery === v && (b.jQuery = R), v
                        }, isReady: !1, readyWait: 1, holdReady: function (j) {
                            j ? v.readyWait++ : v.ready(!0)
                        }, ready: function (j) {
                            if (!0 === j && !--v.readyWait || !0 !== j && !v.isReady) {
                                if (!t.body) return setTimeout(v.ready, 1);
                                v.isReady = !0;
                                !0 !== j && 0 < --v.readyWait || (ac.fireWith(t, [v]),
                                v.fn.trigger && v(t).trigger("ready").off("ready"))
                            }
                        }, bindReady: function () {
                            if (!ac) {
                                ac = v.Callbacks("once memory");
                                if ("complete" === t.readyState) return setTimeout(v.ready, 1);
                                if (t.addEventListener) t.addEventListener("DOMContentLoaded", vb, !1), b.addEventListener("load", v.ready, !1); else if (t.attachEvent) {
                                    t.attachEvent("onreadystatechange", vb);
                                    b.attachEvent("onload", v.ready);
                                    var j = !1;
                                    try {
                                        j = null == b.frameElement
                                    } catch (a) {
                                    }
                                    t.documentElement.doScroll && j && Qc()
                                }
                            }
                        }, isFunction: function (j) {
                            return "function" === v.type(j)
                        },
                        isArray: Array.isArray || function (j) {
                            return "array" === v.type(j)
                        }, isWindow: function (j) {
                            return j && "object" == typeof j && "setInterval" in j
                        }, isNumeric: function (j) {
                            return !isNaN(parseFloat(j)) && isFinite(j)
                        }, type: function (j) {
                            return null == j ? j + "" : Fa[id.call(j)] || "object"
                        }, isPlainObject: function (j) {
                            if (!j || "object" !== v.type(j) || j.nodeType || v.isWindow(j)) return !1;
                            try {
                                if (j.constructor && !Bc.call(j, "constructor") && !Bc.call(j.constructor.prototype, "isPrototypeOf")) return !1
                            } catch (a) {
                                return !1
                            }
                            for (var b in j) ;
                            return b ===
                                c || Bc.call(j, b)
                        }, isEmptyObject: function (j) {
                            for (var a in j) return !1;
                            return !0
                        }, error: function (j) {
                            throw Error(j);
                        }, parseJSON: function (j) {
                            if ("string" != typeof j || !j) return null;
                            j = v.trim(j);
                            if (b.JSON && b.JSON.parse) return b.JSON.parse(j);
                            if (qa.test(j.replace(I, "@").replace($, "]").replace(na, ""))) return Function("return " + j)();
                            v.error("Invalid JSON: " + j)
                        }, parseXML: function (j) {
                            var a, E;
                            try {
                                b.DOMParser ? (E = new DOMParser, a = E.parseFromString(j, "text/xml")) : (a = new ActiveXObject("Microsoft.XMLDOM"), a.async = "false",
                                    a.loadXML(j))
                            } catch (f) {
                                a = c
                            }
                            return (!a || !a.documentElement || a.getElementsByTagName("parsererror").length) && v.error("Invalid XML: " + j), a
                        }, noop: function () {
                        }, globalEval: function (j) {
                            j && sa.test(j) && (b.execScript || function (j) {
                                b.eval.call(b, j)
                            })(j)
                        }, camelCase: function (j) {
                            return j.replace(Sa, "ms-").replace(za, Kb)
                        }, nodeName: function (j, a) {
                            return j.nodeName && j.nodeName.toUpperCase() === a.toUpperCase()
                        }, each: function (j, a, b) {
                            var f, d = 0, e = j.length, g = e === c || v.isFunction(j);
                            if (b) if (g) for (f in j) {
                                if (!1 === a.apply(j[f],
                                    b)) break
                            } else for (; d < e && !1 !== a.apply(j[d++], b);) ; else if (g) for (f in j) {
                                if (!1 === a.call(j[f], f, j[f])) break
                            } else for (; d < e && !1 !== a.call(j[d], d, j[d++]);) ;
                            return j
                        }, trim: oa ? function (j) {
                            return null == j ? "" : oa.call(j)
                        } : function (j) {
                            return null == j ? "" : (j + "").replace(ca, "").replace(ia, "")
                        }, makeArray: function (j, a) {
                            var b = a || [];
                            if (null != j) {
                                var c = v.type(j);
                                null == j.length || "string" === c || "function" === c || "regexp" === c || v.isWindow(j) ? Cc.call(b, j) : v.merge(b, j)
                            }
                            return b
                        }, inArray: function (j, a, b) {
                            var c;
                            if (a) {
                                if (Ca) return Ca.call(a,
                                    j, b);
                                c = a.length;
                                for (b = b ? 0 > b ? Math.max(0, c + b) : b : 0; b < c; b++) if (b in a && a[b] === j) return b
                            }
                            return -1
                        }, merge: function (j, a) {
                            var b = j.length, f = 0;
                            if ("number" == typeof a.length) for (var d = a.length; f < d; f++) j[b++] = a[f]; else for (; a[f] !== c;) j[b++] = a[f++];
                            return j.length = b, j
                        }, grep: function (j, a, b) {
                            for (var c = [], f, b = !!b, d = 0, e = j.length; d < e; d++) f = !!a(j[d], d), b !== f && c.push(j[d]);
                            return c
                        }, map: function (j, a, b) {
                            var f, d, e = [], g = 0, O = j.length;
                            if (j instanceof v || O !== c && "number" == typeof O && (0 < O && j[0] && j[O - 1] || 0 === O || v.isArray(j))) for (; g <
                                                                                                                                                    O; g++) f = a(j[g], g, b), null != f && (e[e.length] = f); else for (d in j) f = a(j[d], d, b), null != f && (e[e.length] = f);
                            return e.concat.apply([], e)
                        }, guid: 1, proxy: function (j, a) {
                            if ("string" == typeof a) var b = j[a], a = j, j = b;
                            if (!v.isFunction(j)) return c;
                            var f = Lb.call(arguments, 2), b = function () {
                                return j.apply(a, f.concat(Lb.call(arguments)))
                            };
                            return b.guid = j.guid = j.guid || b.guid || v.guid++, b
                        }, access: function (j, a, b, f, d, e) {
                            var g = j.length;
                            if ("object" == typeof a) {
                                for (var O in a) v.access(j, O, a[O], f, d, b);
                                return j
                            }
                            if (b !== c) {
                                f = !e && f && v.isFunction(b);
                                for (O = 0; O < g; O++) d(j[O], a, f ? b.call(j[O], O, d(j[O], a)) : b, e);
                                return j
                            }
                            return g ? d(j[0], a) : c
                        }, now: function () {
                            return (new Date).getTime()
                        }, uaMatch: function (j) {
                            j = j.toLowerCase();
                            j = n.exec(j) || M.exec(j) || Z.exec(j) || 0 > j.indexOf("compatible") && va.exec(j) || [];
                            return {browser: j[1] || "", version: j[2] || "0"}
                        }, sub: function () {
                            function j(a, ga) {
                                return new j.fn.init(a, ga)
                            }

                            v.extend(!0, j, this);
                            j.superclass = this;
                            j.fn = j.prototype = this();
                            j.fn.constructor = j;
                            j.sub = this.sub;
                            j.fn.init = function (b, c) {
                                return c && c instanceof v && !(c instanceof
                                    j) && (c = j(c)), v.fn.init.call(this, b, c, a)
                            };
                            j.fn.init.prototype = j.fn;
                            var a = j(t);
                            return j
                        }, browser: {}
                    }), v.each("Boolean Number String Function Array Date RegExp Object".split(" "), function (j, a) {
                        Fa["[object " + a + "]"] = a.toLowerCase()
                    }), $b = v.uaMatch(hd), $b.browser && (v.browser[$b.browser] = !0, v.browser.version = $b.version), v.browser.webkit && (v.browser.safari = !0), sa.test("\u00a0") && (ca = /^[\s\xA0]+/, ia = /[\s\xA0]+$/), X = v(t), t.addEventListener ? vb = function () {
                            t.removeEventListener("DOMContentLoaded", vb, !1);
                            v.ready()
                        } :
                        t.attachEvent && (vb = function () {
                            "complete" === t.readyState && (t.detachEvent("onreadystatechange", vb), v.ready())
                        }), v);
                    var Ga = {};
                    f.Callbacks = function (j) {
                        var a;
                        if (j) {
                            if (!(a = Ga[j])) {
                                a = j;
                                var b = Ga[a] = {}, pa, d;
                                a = a.split(/\s+/);
                                pa = 0;
                                for (d = a.length; pa < d; pa++) b[a[pa]] = !0;
                                a = b
                            }
                        } else a = {};
                        var j = a, e = [], g = [], O, k, n, m, x, z = function (a) {
                            var ga, b, c, E;
                            ga = 0;
                            for (b = a.length; ga < b; ga++) c = a[ga], E = f.type(c), "array" === E ? z(c) : "function" === E && (!j.unique || !r.has(c)) && e.push(c)
                        }, M = function (a, ga) {
                            ga = ga || [];
                            O = !j.memory || [a, ga];
                            k = !0;
                            x = n ||
                                0;
                            n = 0;
                            for (m = e.length; e && x < m; x++) if (!1 === e[x].apply(a, ga) && j.stopOnFalse) {
                                O = !0;
                                break
                            }
                            k = !1;
                            e && (j.once ? !0 === O ? r.disable() : e = [] : g && g.length && (O = g.shift(), r.fireWith(O[0], O[1])))
                        }, r = {
                            add: function () {
                                if (e) {
                                    var j = e.length;
                                    z(arguments);
                                    k ? m = e.length : O && !0 !== O && (n = j, M(O[0], O[1]))
                                }
                                return this
                            }, remove: function () {
                                if (e) for (var a = arguments, ga = 0, b = a.length; ga < b; ga++) for (var c = 0; c < e.length && !(a[ga] === e[c] && (k && c <= m && (m--, c <= x && x--), e.splice(c--, 1), j.unique)); c++) ;
                                return this
                            }, has: function (j) {
                                if (e) for (var a = 0, ga = e.length; a <
                                ga; a++) if (j === e[a]) return !0;
                                return !1
                            }, empty: function () {
                                return e = [], this
                            }, disable: function () {
                                return e = g = O = c, this
                            }, disabled: function () {
                                return !e
                            }, lock: function () {
                                return g = c, (!O || !0 === O) && r.disable(), this
                            }, locked: function () {
                                return !g
                            }, fireWith: function (a, ga) {
                                return g && (k ? j.once || g.push([a, ga]) : (!j.once || !O) && M(a, ga)), this
                            }, fire: function () {
                                return r.fireWith(this, arguments), this
                            }, fired: function () {
                                return !!O
                            }
                        };
                        return r
                    };
                    var ua = [].slice;
                    f.extend({
                        Deferred: function (j) {
                            var a = f.Callbacks("once memory"), b = f.Callbacks("once memory"),
                                c = f.Callbacks("memory"), d = "pending", e = {resolve: a, reject: b, notify: c}, g = {
                                    done: a.add, fail: b.add, progress: c.add, state: function () {
                                        return d
                                    }, isResolved: a.fired, isRejected: b.fired, then: function (j, a, ga) {
                                        return O.done(j).fail(a).progress(ga), this
                                    }, always: function () {
                                        return O.done.apply(O, arguments).fail.apply(O, arguments), this
                                    }, pipe: function (j, a, ga) {
                                        return f.Deferred(function (b) {
                                            f.each({
                                                done: [j, "resolve"],
                                                fail: [a, "reject"],
                                                progress: [ga, "notify"]
                                            }, function (j, a) {
                                                var ga = a[0], c = a[1], E;
                                                f.isFunction(ga) ? O[j](function () {
                                                    (E =
                                                        ga.apply(this, arguments)) && f.isFunction(E.promise) ? E.promise().then(b.resolve, b.reject, b.notify) : b[c + "With"](this === O ? b : this, [E])
                                                }) : O[j](b[c])
                                            })
                                        }).promise()
                                    }, promise: function (j) {
                                        if (null == j) j = g; else for (var a in g) j[a] = g[a];
                                        return j
                                    }
                                }, O = g.promise({}), k;
                            for (k in e) O[k] = e[k].fire, O[k + "With"] = e[k].fireWith;
                            return O.done(function () {
                                d = "resolved"
                            }, b.disable, c.lock).fail(function () {
                                d = "rejected"
                            }, a.disable, c.lock), j && j.call(O, O), O
                        }, when: function (j) {
                            function a(j) {
                                return function (a) {
                                    c[j] = 1 < arguments.length ?
                                        ua.call(arguments, 0) : a;
                                    --k || n.resolveWith(n, c)
                                }
                            }

                            function b(j) {
                                return function (a) {
                                    g[j] = 1 < arguments.length ? ua.call(arguments, 0) : a;
                                    n.notifyWith(m, g)
                                }
                            }

                            var c = ua.call(arguments, 0), d = 0, e = c.length, g = Array(e), k = e,
                                n = 1 >= e && j && f.isFunction(j.promise) ? j : f.Deferred(), m = n.promise();
                            if (1 < e) {
                                for (; d < e; d++) c[d] && c[d].promise && f.isFunction(c[d].promise) ? c[d].promise().then(a(d), n.reject, b(d)) : --k;
                                k || n.resolveWith(n, c)
                            } else n !== j && n.resolveWith(n, e ? [j] : []);
                            return m
                        }
                    });
                    var Oa = f, Ea;
                    var wa, Ha, wb, Da, bc, Aa, xb, eb, Mb, La, Qa,
                        Nb, G = t.createElement("div");
                    G.setAttribute("className", "t");
                    G.innerHTML = "   <link/><table></table><a href='/a' style='top:1px;float:left;opacity:.55;'>a</a><input type='checkbox'/>";
                    Ha = G.getElementsByTagName("*");
                    wb = G.getElementsByTagName("a")[0];
                    if (!Ha || !Ha.length || !wb) Ea = {}; else {
                        Da = t.createElement("select");
                        bc = Da.appendChild(t.createElement("option"));
                        Aa = G.getElementsByTagName("input")[0];
                        wa = {
                            leadingWhitespace: 3 === G.firstChild.nodeType,
                            tbody: !G.getElementsByTagName("tbody").length,
                            htmlSerialize: !!G.getElementsByTagName("link").length,
                            style: /top/.test(wb.getAttribute("style")),
                            hrefNormalized: "/a" === wb.getAttribute("href"),
                            opacity: /^0.55/.test(wb.style.opacity),
                            cssFloat: !!wb.style.cssFloat,
                            checkOn: "on" === Aa.value,
                            optSelected: bc.selected,
                            getSetAttribute: "t" !== G.className,
                            enctype: !!t.createElement("form").enctype,
                            html5Clone: "<:nav></:nav>" !== t.createElement("nav").cloneNode(!0).outerHTML,
                            submitBubbles: !0,
                            changeBubbles: !0,
                            focusinBubbles: !1,
                            deleteExpando: !0,
                            noCloneEvent: !0,
                            inlineBlockNeedsLayout: !1,
                            shrinkWrapBlocks: !1,
                            reliableMarginRight: !0
                        };
                        Aa.checked = !0;
                        wa.noCloneChecked = Aa.cloneNode(!0).checked;
                        Da.disabled = !0;
                        wa.optDisabled = !bc.disabled;
                        try {
                            delete G.test
                        } catch (u) {
                            wa.deleteExpando = !1
                        }
                        !G.addEventListener && G.attachEvent && G.fireEvent && (G.attachEvent("onclick", function () {
                            wa.noCloneEvent = !1
                        }), G.cloneNode(!0).fireEvent("onclick"));
                        Aa = t.createElement("input");
                        Aa.value = "t";
                        Aa.setAttribute("type", "radio");
                        wa.radioValue = "t" === Aa.value;
                        Aa.setAttribute("checked", "checked");
                        G.appendChild(Aa);
                        eb = t.createDocumentFragment();
                        eb.appendChild(G.lastChild);
                        wa.checkClone = eb.cloneNode(!0).cloneNode(!0).lastChild.checked;
                        wa.appendChecked = Aa.checked;
                        eb.removeChild(Aa);
                        eb.appendChild(G);
                        G.innerHTML = "";
                        b.getComputedStyle && (xb = t.createElement("div"), xb.style.width = "0", xb.style.marginRight = "0", G.style.width = "2px", G.appendChild(xb), wa.reliableMarginRight = 0 === (parseInt((b.getComputedStyle(xb, null) || {marginRight: 0}).marginRight, 10) || 0));
                        if (G.attachEvent) for (Qa in{
                            submit: 1,
                            change: 1,
                            focusin: 1
                        }) La = "on" + Qa, (Nb = La in G) || (G.setAttribute(La, "return;"), Nb = "function" ==
                            typeof G[La]), wa[Qa + "Bubbles"] = Nb;
                        Ea = (eb.removeChild(G), eb = Da = bc = xb = G = Aa = null, f(function () {
                            var j, a, b, c, d = t.getElementsByTagName("body")[0];
                            d && (j = t.createElement("div"), j.style.cssText = "visibility:hidden;border:0;width:0;height:0;position:static;top:0;margin-top:1px", d.insertBefore(j, d.firstChild), G = t.createElement("div"), j.appendChild(G), G.innerHTML = "<table><tr><td style='padding:0;border:0;display:none'></td><td>t</td></tr></table>", Mb = G.getElementsByTagName("td"), Nb = 0 === Mb[0].offsetHeight, Mb[0].style.display =
                                "", Mb[1].style.display = "none", wa.reliableHiddenOffsets = Nb && 0 === Mb[0].offsetHeight, G.innerHTML = "", G.style.width = G.style.paddingLeft = "1px", f.boxModel = wa.boxModel = 2 === G.offsetWidth, "undefined" != typeof G.style.zoom && (G.style.display = "inline", G.style.zoom = 1, wa.inlineBlockNeedsLayout = 2 === G.offsetWidth, G.style.display = "", G.innerHTML = "<div style='width:4px;'></div>", wa.shrinkWrapBlocks = 2 !== G.offsetWidth), G.style.cssText = "position:absolute;top:0;left:0;width:1px;height:1px;margin:0;visibility:hidden;border:0;",
                                G.innerHTML = "<div style='position:absolute;top:0;left:0;width:1px;height:1px;margin:0;border:5px solid #000;padding:0;'><div></div></div><table style='position:absolute;top:0;left:0;width:1px;height:1px;margin:0;border:5px solid #000;padding:0;' cellpadding='0' cellspacing='0'><tr><td></td></tr></table>", a = G.firstChild, b = a.firstChild, c = a.nextSibling.firstChild.firstChild, c = {
                                doesNotAddBorder: 5 !== b.offsetTop,
                                doesAddBorderForTableAndCells: 5 === c.offsetTop
                            }, b.style.position = "fixed", b.style.top = "20px",
                                c.fixedPosition = 20 === b.offsetTop || 15 === b.offsetTop, b.style.position = b.style.top = "", a.style.overflow = "hidden", a.style.position = "relative", c.subtractsBorderForOverflowNotVisible = -5 === b.offsetTop, c.doesNotIncludeMarginInBodyOffset = 1 !== d.offsetTop, d.removeChild(j), G = null, f.extend(wa, c))
                        }), wa)
                    }
                    Oa.support = Ea;
                    var fd = /^(?:\{.*\}|\[.*\])$/, ed = /([A-Z])/g;
                    f.extend({
                        cache: {},
                        uuid: 0,
                        expando: "jQuery" + (f.fn.jquery + Math.random()).replace(/\D/g, ""),
                        noData: {
                            embed: !0, object: "clsid:D27CDB6E-AE6D-11cf-96B8-444553540000",
                            applet: !0
                        },
                        hasData: function (j) {
                            return j = j.nodeType ? f.cache[j[f.expando]] : j[f.expando], !!j && !e(j)
                        },
                        data: function (j, a, b, pa) {
                            if (f.acceptData(j)) {
                                var d, e, g, k = f.expando, n = "string" == typeof a, m = j.nodeType,
                                    x = m ? f.cache : j, z = m ? j[k] : j[k] && k, M = "events" === a;
                                if (z && x[z] && (M || pa || x[z].data) || !(n && b === c)) {
                                    z || (m ? j[k] = z = ++f.uuid : z = k);
                                    x[z] || (x[z] = {}, m || (x[z].toJSON = f.noop));
                                    if ("object" == typeof a || "function" == typeof a) pa ? x[z] = f.extend(x[z], a) : x[z].data = f.extend(x[z].data, a);
                                    return d = e = x[z], pa || (e.data || (e.data = {}), e = e.data),
                                    b !== c && (e[f.camelCase(a)] = b), M && !e[a] ? d.events : (n ? (g = e[a], null == g && (g = e[f.camelCase(a)])) : g = e, g)
                                }
                            }
                        },
                        removeData: function (j, a, b) {
                            if (f.acceptData(j)) {
                                var c, d, g, k = f.expando, n = j.nodeType, m = n ? f.cache : j, x = n ? j[k] : k;
                                if (m[x]) {
                                    if (a && (c = b ? m[x] : m[x].data)) {
                                        f.isArray(a) || (a in c ? a = [a] : (a = f.camelCase(a), a in c ? a = [a] : a = a.split(" ")));
                                        d = 0;
                                        for (g = a.length; d < g; d++) delete c[a[d]];
                                        if (!(b ? e : f.isEmptyObject)(c)) return
                                    }
                                    if (!b && (delete m[x].data, !e(m[x]))) return;
                                    f.support.deleteExpando || !m.setInterval ? delete m[x] : m[x] = null;
                                    n && (f.support.deleteExpando ? delete j[k] : j.removeAttribute ? j.removeAttribute(k) : j[k] = null)
                                }
                            }
                        },
                        _data: function (j, a, b) {
                            return f.data(j, a, b, !0)
                        },
                        acceptData: function (j) {
                            if (j.nodeName) {
                                var a = f.noData[j.nodeName.toLowerCase()];
                                if (a) return !0 !== a && j.getAttribute("classid") === a
                            }
                            return !0
                        }
                    });
                    f.fn.extend({
                        data: function (j, a) {
                            var b, pa, e, g = null;
                            if ("undefined" == typeof j) {
                                if (this.length && (g = f.data(this[0]), 1 === this[0].nodeType && !f._data(this[0], "parsedAttrs"))) {
                                    pa = this[0].attributes;
                                    for (var k = 0, n = pa.length; k < n; k++) e =
                                        pa[k].name, 0 === e.indexOf("data-") && (e = f.camelCase(e.substring(5)), d(this[0], e, g[e]));
                                    f._data(this[0], "parsedAttrs", !0)
                                }
                                return g
                            }
                            return "object" == typeof j ? this.each(function () {
                                f.data(this, j)
                            }) : (b = j.split("."), b[1] = b[1] ? "." + b[1] : "", a === c ? (g = this.triggerHandler("getData" + b[1] + "!", [b[0]]), g === c && this.length && (g = f.data(this[0], j), g = d(this[0], j, g)), g === c && b[1] ? this.data(b[0]) : g) : this.each(function () {
                                var c = f(this), pa = [b[0], a];
                                c.triggerHandler("setData" + b[1] + "!", pa);
                                f.data(this, j, a);
                                c.triggerHandler("changeData" +
                                    b[1] + "!", pa)
                            }))
                        }, removeData: function (j) {
                            return this.each(function () {
                                f.removeData(this, j)
                            })
                        }
                    });
                    f.extend({
                        _mark: function (j, a) {
                            j && (a = (a || "fx") + "mark", f._data(j, a, (f._data(j, a) || 0) + 1))
                        }, _unmark: function (j, a, b) {
                            !0 !== j && (b = a, a = j, j = !1);
                            if (a) {
                                var b = b || "fx", c = b + "mark";
                                (j = j ? 0 : (f._data(a, c) || 1) - 1) ? f._data(a, c, j) : (f.removeData(a, c, !0), m(a, b, "mark"))
                            }
                        }, queue: function (j, a, b) {
                            var c;
                            if (j) return a = (a || "fx") + "queue", c = f._data(j, a), b && (!c || f.isArray(b) ? c = f._data(j, a, f.makeArray(b)) : c.push(b)), c || []
                        }, dequeue: function (j,
                                              a) {
                            var a = a || "fx", b = f.queue(j, a), c = b.shift(), d = {};
                            "inprogress" === c && (c = b.shift());
                            c && ("fx" === a && b.unshift("inprogress"), f._data(j, a + ".run", d), c.call(j, function () {
                                f.dequeue(j, a)
                            }, d));
                            b.length || (f.removeData(j, a + "queue " + a + ".run", !0), m(j, a, "queue"))
                        }
                    });
                    f.fn.extend({
                        queue: function (j, a) {
                            return "string" != typeof j && (a = j, j = "fx"), a === c ? f.queue(this[0], j) : this.each(function () {
                                var b = f.queue(this, j, a);
                                "fx" === j && "inprogress" !== b[0] && f.dequeue(this, j)
                            })
                        }, dequeue: function (j) {
                            return this.each(function () {
                                f.dequeue(this,
                                    j)
                            })
                        }, delay: function (j, a) {
                            return j = f.fx ? f.fx.speeds[j] || j : j, a = a || "fx", this.queue(a, function (a, b) {
                                var ga = setTimeout(a, j);
                                b.stop = function () {
                                    clearTimeout(ga)
                                }
                            })
                        }, clearQueue: function (j) {
                            return this.queue(j || "fx", [])
                        }, promise: function (j) {
                            function a() {
                                --g || b.resolveWith(d, [d])
                            }

                            "string" != typeof j && (j = c);
                            for (var j = j || "fx", b = f.Deferred(), d = this, e = d.length, g = 1, k = j + "defer", n = j + "queue", j = j + "mark", m; e--;) if (m = f.data(d[e], k, c, !0) || (f.data(d[e], n, c, !0) || f.data(d[e], j, c, !0)) && f.data(d[e], k, f.Callbacks("once memory"),
                                !0)) g++, m.add(a);
                            return a(), b.promise()
                        }
                    });
                    var Rc = /[\n\t\r]/g, D = /\s+/, jd = /\r/g, kd = /^(?:button|input)$/i,
                        ld = /^(?:button|input|object|select|textarea)$/i, N = /^a(?:rea)?$/i,
                        Sc = /^(?:autofocus|autoplay|async|checked|controls|defer|disabled|hidden|loop|multiple|open|readonly|required|scoped|selected)$/i,
                        Tc = f.support.getSetAttribute, Wa, Uc, Vc;
                    f.fn.extend({
                        attr: function (j, a) {
                            return f.access(this, j, a, !0, f.attr)
                        }, removeAttr: function (j) {
                            return this.each(function () {
                                f.removeAttr(this, j)
                            })
                        }, prop: function (j, a) {
                            return f.access(this,
                                j, a, !0, f.prop)
                        }, removeProp: function (j) {
                            return j = f.propFix[j] || j, this.each(function () {
                                try {
                                    this[j] = c, delete this[j]
                                } catch (a) {
                                }
                            })
                        }, addClass: function (j) {
                            var a, b, c, d, e, g, k;
                            if (f.isFunction(j)) return this.each(function (a) {
                                f(this).addClass(j.call(this, a, this.className))
                            });
                            if (j && "string" == typeof j) {
                                a = j.split(D);
                                b = 0;
                                for (c = this.length; b < c; b++) if (d = this[b], 1 === d.nodeType) if (!d.className && 1 === a.length) d.className = j; else {
                                    e = " " + d.className + " ";
                                    g = 0;
                                    for (k = a.length; g < k; g++) ~e.indexOf(" " + a[g] + " ") || (e += a[g] + " ");
                                    d.className =
                                        f.trim(e)
                                }
                            }
                            return this
                        }, removeClass: function (j) {
                            var a, b, d, e, g, k, n;
                            if (f.isFunction(j)) return this.each(function (a) {
                                f(this).removeClass(j.call(this, a, this.className))
                            });
                            if (j && "string" == typeof j || j === c) {
                                a = (j || "").split(D);
                                b = 0;
                                for (d = this.length; b < d; b++) if (e = this[b], 1 === e.nodeType && e.className) if (j) {
                                    g = (" " + e.className + " ").replace(Rc, " ");
                                    k = 0;
                                    for (n = a.length; k < n; k++) g = g.replace(" " + a[k] + " ", " ");
                                    e.className = f.trim(g)
                                } else e.className = ""
                            }
                            return this
                        }, toggleClass: function (j, a) {
                            var b = typeof j, c = "boolean" ==
                                typeof a;
                            return f.isFunction(j) ? this.each(function (b) {
                                f(this).toggleClass(j.call(this, b, this.className, a), a)
                            }) : this.each(function () {
                                if ("string" === b) for (var d, e = 0, g = f(this), k = a, n = j.split(D); d = n[e++];) k = c ? k : !g.hasClass(d), g[k ? "addClass" : "removeClass"](d); else if ("undefined" === b || "boolean" === b) this.className && f._data(this, "__className__", this.className), this.className = this.className || !1 === j ? "" : f._data(this, "__className__") || ""
                            })
                        }, hasClass: function (j) {
                            for (var j = " " + j + " ", a = 0, b = this.length; a < b; a++) if (1 ===
                                this[a].nodeType && -1 < (" " + this[a].className + " ").replace(Rc, " ").indexOf(j)) return !0;
                            return !1
                        }, val: function (j) {
                            var a, b, d, e = this[0];
                            if (arguments.length) return d = f.isFunction(j), this.each(function (b) {
                                var E = f(this), e;
                                if (1 === this.nodeType && (d ? e = j.call(this, b, E.val()) : e = j, null == e ? e = "" : "number" == typeof e ? e += "" : f.isArray(e) && (e = f.map(e, function (j) {
                                    return null == j ? "" : j + ""
                                })), a = f.valHooks[this.nodeName.toLowerCase()] || f.valHooks[this.type], !a || !("set" in a) || a.set(this, e, "value") === c)) this.value = e
                            });
                            if (e) return a =
                                f.valHooks[e.nodeName.toLowerCase()] || f.valHooks[e.type], a && "get" in a && (b = a.get(e, "value")) !== c ? b : (b = e.value, "string" == typeof b ? b.replace(jd, "") : null == b ? "" : b)
                        }
                    });
                    f.extend({
                        valHooks: {
                            option: {
                                get: function (j) {
                                    var a = j.attributes.value;
                                    return !a || a.specified ? j.value : j.text
                                }
                            }, select: {
                                get: function (j) {
                                    var a, b, c = j.selectedIndex, d = [], e = j.options, g = "select-one" === j.type;
                                    if (0 > c) return null;
                                    j = g ? c : 0;
                                    for (b = g ? c + 1 : e.length; j < b; j++) if (a = e[j], a.selected && (f.support.optDisabled ? !a.disabled : null === a.getAttribute("disabled")) &&
                                    (!a.parentNode.disabled || !f.nodeName(a.parentNode, "optgroup"))) {
                                        a = f(a).val();
                                        if (g) return a;
                                        d.push(a)
                                    }
                                    return g && !d.length && e.length ? f(e[c]).val() : d
                                }, set: function (j, a) {
                                    var b = f.makeArray(a);
                                    return f(j).find("option").each(function () {
                                        this.selected = 0 <= f.inArray(f(this).val(), b)
                                    }), b.length || (j.selectedIndex = -1), b
                                }
                            }
                        },
                        attrFn: {val: !0, css: !0, html: !0, text: !0, data: !0, width: !0, height: !0, offset: !0},
                        attr: function (j, a, b, d) {
                            var e, g, k = j.nodeType;
                            if (j && !(3 === k || 8 === k || 2 === k)) {
                                if (d && a in f.attrFn) return f(j)[a](b);
                                if ("undefined" ==
                                    typeof j.getAttribute) return f.prop(j, a, b);
                                (d = 1 !== k || !f.isXMLDoc(j)) && (a = a.toLowerCase(), g = f.attrHooks[a] || (Sc.test(a) ? Uc : Wa));
                                if (b !== c) {
                                    if (null === b) {
                                        f.removeAttr(j, a);
                                        return
                                    }
                                    return g && "set" in g && d && (e = g.set(j, b, a)) !== c ? e : (j.setAttribute(a, "" + b), b)
                                }
                                return g && "get" in g && d && null !== (e = g.get(j, a)) ? e : (e = j.getAttribute(a), null === e ? c : e)
                            }
                        },
                        removeAttr: function (j, a) {
                            var b, c, d, e, g = 0;
                            if (a && 1 === j.nodeType) {
                                c = a.toLowerCase().split(D);
                                for (e = c.length; g < e; g++) (d = c[g]) && (b = f.propFix[d] || d, f.attr(j, d, ""), j.removeAttribute(Tc ?
                                    d : b), Sc.test(d) && b in j && (j[b] = !1))
                            }
                        },
                        attrHooks: {
                            type: {
                                set: function (j, a) {
                                    if (kd.test(j.nodeName) && j.parentNode) f.error("type property can't be changed"); else if (!f.support.radioValue && "radio" === a && f.nodeName(j, "input")) {
                                        var b = j.value;
                                        return j.setAttribute("type", a), b && (j.value = b), a
                                    }
                                }
                            }, value: {
                                get: function (j, a) {
                                    return Wa && f.nodeName(j, "button") ? Wa.get(j, a) : a in j ? j.value : null
                                }, set: function (j, a, b) {
                                    if (Wa && f.nodeName(j, "button")) return Wa.set(j, a, b);
                                    j.value = a
                                }
                            }
                        },
                        propFix: {
                            tabindex: "tabIndex",
                            readonly: "readOnly",
                            "for": "htmlFor",
                            "class": "className",
                            maxlength: "maxLength",
                            cellspacing: "cellSpacing",
                            cellpadding: "cellPadding",
                            rowspan: "rowSpan",
                            colspan: "colSpan",
                            usemap: "useMap",
                            frameborder: "frameBorder",
                            contenteditable: "contentEditable"
                        },
                        prop: function (j, a, b) {
                            var d, e, g, k = j.nodeType;
                            if (j && !(3 === k || 8 === k || 2 === k)) return g = 1 !== k || !f.isXMLDoc(j), g && (a = f.propFix[a] || a, e = f.propHooks[a]), b !== c ? e && "set" in e && (d = e.set(j, b, a)) !== c ? d : j[a] = b : e && "get" in e && null !== (d = e.get(j, a)) ? d : j[a]
                        },
                        propHooks: {
                            tabIndex: {
                                get: function (j) {
                                    var a =
                                        j.getAttributeNode("tabindex");
                                    return a && a.specified ? parseInt(a.value, 10) : ld.test(j.nodeName) || N.test(j.nodeName) && j.href ? 0 : c
                                }
                            }
                        }
                    });
                    f.attrHooks.tabindex = f.propHooks.tabIndex;
                    Uc = {
                        get: function (j, a) {
                            var b, d = f.prop(j, a);
                            return !0 === d || "boolean" != typeof d && (b = j.getAttributeNode(a)) && !1 !== b.nodeValue ? a.toLowerCase() : c
                        }, set: function (j, a, b) {
                            var c;
                            return !1 === a ? f.removeAttr(j, b) : (c = f.propFix[b] || b, c in j && (j[c] = !0), j.setAttribute(b, b.toLowerCase())), b
                        }
                    };
                    Tc || (Vc = {name: !0, id: !0}, Wa = f.valHooks.button = {
                        get: function (j,
                                       a) {
                            var b;
                            return b = j.getAttributeNode(a), b && (Vc[a] ? "" !== b.nodeValue : b.specified) ? b.nodeValue : c
                        }, set: function (j, a, b) {
                            var c = j.getAttributeNode(b);
                            return c || (c = t.createAttribute(b), j.setAttributeNode(c)), c.nodeValue = a + ""
                        }
                    }, f.attrHooks.tabindex.set = Wa.set, f.each(["width", "height"], function (j, a) {
                        f.attrHooks[a] = f.extend(f.attrHooks[a], {
                            set: function (j, b) {
                                if ("" === b) return j.setAttribute(a, "auto"), b
                            }
                        })
                    }), f.attrHooks.contenteditable = {
                        get: Wa.get, set: function (j, a, b) {
                            "" === a && (a = "false");
                            Wa.set(j, a, b)
                        }
                    });
                    f.support.hrefNormalized ||
                    f.each(["href", "src", "width", "height"], function (j, a) {
                        f.attrHooks[a] = f.extend(f.attrHooks[a], {
                            get: function (j) {
                                j = j.getAttribute(a, 2);
                                return null === j ? c : j
                            }
                        })
                    });
                    f.support.style || (f.attrHooks.style = {
                        get: function (j) {
                            return j.style.cssText.toLowerCase() || c
                        }, set: function (j, a) {
                            return j.style.cssText = "" + a
                        }
                    });
                    f.support.optSelected || (f.propHooks.selected = f.extend(f.propHooks.selected, {
                        get: function (j) {
                            j = j.parentNode;
                            return j && (j.selectedIndex, j.parentNode && j.parentNode.selectedIndex), null
                        }
                    }));
                    f.support.enctype ||
                    (f.propFix.enctype = "encoding");
                    f.support.checkOn || f.each(["radio", "checkbox"], function () {
                        f.valHooks[this] = {
                            get: function (j) {
                                return null === j.getAttribute("value") ? "on" : j.value
                            }
                        }
                    });
                    f.each(["radio", "checkbox"], function () {
                        f.valHooks[this] = f.extend(f.valHooks[this], {
                            set: function (j, a) {
                                if (f.isArray(a)) return j.checked = 0 <= f.inArray(f(j).val(), a)
                            }
                        })
                    });
                    var la = /^(?:textarea|input|select)$/i, Ta = /^([^\.]*)?(?:\.(.+))?$/, ab = /\bhover(\.\S+)?\b/,
                        md = /^key/, nd = /^(?:mouse|contextmenu)|click/, Wc = /^(?:focusinfocus|focusoutblur)$/,
                        k = /^(\w*)(?:#([\w\-]+))?(?:\.([\w\-]+))?$/, ka = function (j) {
                            j = k.exec(j);
                            return j && (j[1] = (j[1] || "").toLowerCase(), j[3] = j[3] && RegExp("(?:^|\\s)" + j[3] + "(?:\\s|$)")), j
                        }, z = function (j) {
                            return f.event.special.hover ? j : j.replace(ab, "mouseenter$1 mouseleave$1")
                        };
                    f.event = {
                        add: function (j, a, b, d, e) {
                            var g, k, n, m, x, M, r, p, Z;
                            if (!(3 === j.nodeType || 8 === j.nodeType || !a || !b || !(g = f._data(j)))) {
                                b.handler && (r = b, b = r.handler);
                                b.guid || (b.guid = f.guid++);
                                (n = g.events) || (g.events = n = {});
                                (k = g.handle) || (g.handle = k = function (j) {
                                    return "undefined" ==
                                    typeof f || j && f.event.triggered === j.type ? c : f.event.dispatch.apply(k.elem, arguments)
                                }, k.elem = j);
                                a = f.trim(z(a)).split(" ");
                                for (g = 0; g < a.length; g++) {
                                    m = Ta.exec(a[g]) || [];
                                    x = m[1];
                                    M = (m[2] || "").split(".").sort();
                                    Z = f.event.special[x] || {};
                                    x = (e ? Z.delegateType : Z.bindType) || x;
                                    Z = f.event.special[x] || {};
                                    m = f.extend({
                                        type: x,
                                        origType: m[1],
                                        data: d,
                                        handler: b,
                                        guid: b.guid,
                                        selector: e,
                                        quick: ka(e),
                                        namespace: M.join(".")
                                    }, r);
                                    p = n[x];
                                    if (!p && (p = n[x] = [], p.delegateCount = 0, !Z.setup || !1 === Z.setup.call(j, d, M, k))) j.addEventListener ? j.addEventListener(x,
                                        k, !1) : j.attachEvent && j.attachEvent("on" + x, k);
                                    Z.add && (Z.add.call(j, m), m.handler.guid || (m.handler.guid = b.guid));
                                    e ? p.splice(p.delegateCount++, 0, m) : p.push(m);
                                    f.event.global[x] = !0
                                }
                                j = null
                            }
                        },
                        global: {},
                        remove: function (j, a, b, c, d) {
                            var e = f.hasData(j) && f._data(j), g, k, n, m, x, M, r, ka, p, Z, A;
                            if (e && (r = e.events)) {
                                a = f.trim(z(a || "")).split(" ");
                                for (g = 0; g < a.length; g++) if (k = Ta.exec(a[g]) || [], n = m = k[1], k = k[2], n) {
                                    ka = f.event.special[n] || {};
                                    n = (c ? ka.delegateType : ka.bindType) || n;
                                    Z = r[n] || [];
                                    x = Z.length;
                                    k = k ? RegExp("(^|\\.)" + k.split(".").sort().join("\\.(?:.*\\.)?") +
                                        "(\\.|$)") : null;
                                    for (M = 0; M < Z.length; M++) A = Z[M], (d || m === A.origType) && (!b || b.guid === A.guid) && (!k || k.test(A.namespace)) && (!c || c === A.selector || "**" === c && A.selector) && (Z.splice(M--, 1), A.selector && Z.delegateCount--, ka.remove && ka.remove.call(j, A));
                                    0 === Z.length && x !== Z.length && ((!ka.teardown || !1 === ka.teardown.call(j, k)) && f.removeEvent(j, n, e.handle), delete r[n])
                                } else for (n in r) f.event.remove(j, n + a[g], b, c, !0);
                                f.isEmptyObject(r) && (p = e.handle, p && (p.elem = null), f.removeData(j, ["events", "handle"], !0))
                            }
                        },
                        customEvent: {
                            getData: !0,
                            setData: !0, changeData: !0
                        },
                        trigger: function (j, a, d, e) {
                            if (!d || 3 !== d.nodeType && 8 !== d.nodeType) {
                                var g = j.type || j, k = [], n, m, x, z, M, r;
                                if (!Wc.test(g + f.event.triggered) && (0 <= g.indexOf("!") && (g = g.slice(0, -1), n = !0), 0 <= g.indexOf(".") && (k = g.split("."), g = k.shift(), k.sort()), d && !f.event.customEvent[g] || f.event.global[g])) if (j = "object" == typeof j ? j[f.expando] ? j : new f.Event(g, j) : new f.Event(g), j.type = g, j.isTrigger = !0, j.exclusive = n, j.namespace = k.join("."), j.namespace_re = j.namespace ? RegExp("(^|\\.)" + k.join("\\.(?:.*\\.)?") +
                                    "(\\.|$)") : null, n = 0 > g.indexOf(":") ? "on" + g : "", d) {
                                    if (j.result = c, j.target || (j.target = d), a = null != a ? f.makeArray(a) : [], a.unshift(j), z = f.event.special[g] || {}, !(z.trigger && !1 === z.trigger.apply(d, a))) {
                                        r = [[d, z.bindType || g]];
                                        if (!e && !z.noBubble && !f.isWindow(d)) {
                                            m = z.delegateType || g;
                                            k = Wc.test(m + g) ? d : d.parentNode;
                                            for (x = null; k; k = k.parentNode) r.push([k, m]), x = k;
                                            x && x === d.ownerDocument && r.push([x.defaultView || x.parentWindow || b, m])
                                        }
                                        for (m = 0; m < r.length && !j.isPropagationStopped(); m++) k = r[m][0], j.type = r[m][1], (M = (f._data(k,
                                            "events") || {})[j.type] && f._data(k, "handle")) && M.apply(k, a), (M = n && k[n]) && f.acceptData(k) && !1 === M.apply(k, a) && j.preventDefault();
                                        return j.type = g, !e && !j.isDefaultPrevented() && (!z._default || !1 === z._default.apply(d.ownerDocument, a)) && ("click" !== g || !f.nodeName(d, "a")) && f.acceptData(d) && n && d[g] && ("focus" !== g && "blur" !== g || 0 !== j.target.offsetWidth) && !f.isWindow(d) && (x = d[n], x && (d[n] = null), f.event.triggered = g, d[g](), f.event.triggered = c, x && (d[n] = x)), j.result
                                    }
                                } else for (m in d = f.cache, d) d[m].events && d[m].events[g] &&
                                f.event.trigger(j, a, d[m].handle.elem, !0)
                            }
                        },
                        dispatch: function (j) {
                            var j = f.event.fix(j || b.event), a = (f._data(this, "events") || {})[j.type] || [],
                                d = a.delegateCount, e = [].slice.call(arguments, 0), g = !j.exclusive && !j.namespace,
                                k = [], n, m, x, z, M, r, ka;
                            e[0] = j;
                            j.delegateTarget = this;
                            if (d && !j.target.disabled && (!j.button || "click" !== j.type)) {
                                x = f(this);
                                x.context = this.ownerDocument || this;
                                for (m = j.target; m != this; m = m.parentNode || this) {
                                    M = {};
                                    r = [];
                                    x[0] = m;
                                    for (n = 0; n < d; n++) {
                                        z = a[n];
                                        ka = z.selector;
                                        if (M[ka] === c) {
                                            var Z = M, p = ka, A;
                                            if (z.quick) {
                                                A =
                                                    z.quick;
                                                var P = m.attributes || {};
                                                A = (!A[1] || m.nodeName.toLowerCase() === A[1]) && (!A[2] || (P.id || {}).value === A[2]) && (!A[3] || A[3].test((P["class"] || {}).value))
                                            } else A = x.is(ka);
                                            Z[p] = A
                                        }
                                        M[ka] && r.push(z)
                                    }
                                    r.length && k.push({elem: m, matches: r})
                                }
                            }
                            a.length > d && k.push({elem: this, matches: a.slice(d)});
                            for (n = 0; n < k.length && !j.isPropagationStopped(); n++) {
                                d = k[n];
                                j.currentTarget = d.elem;
                                for (a = 0; a < d.matches.length && !j.isImmediatePropagationStopped(); a++) if (z = d.matches[a], g || !j.namespace && !z.namespace || j.namespace_re && j.namespace_re.test(z.namespace)) j.data =
                                    z.data, j.handleObj = z, z = ((f.event.special[z.origType] || {}).handle || z.handler).apply(d.elem, e), z !== c && (j.result = z, !1 === z && (j.preventDefault(), j.stopPropagation()))
                            }
                            return j.result
                        },
                        props: "attrChange attrName relatedNode srcElement altKey bubbles cancelable ctrlKey currentTarget eventPhase metaKey relatedTarget shiftKey target timeStamp view which".split(" "),
                        fixHooks: {},
                        keyHooks: {
                            props: ["char", "charCode", "key", "keyCode"], filter: function (j, a) {
                                return null == j.which && (j.which = null != a.charCode ? a.charCode :
                                    a.keyCode), j
                            }
                        },
                        mouseHooks: {
                            props: "button buttons clientX clientY fromElement offsetX offsetY pageX pageY screenX screenY toElement".split(" "),
                            filter: function (j, a) {
                                var b, f, d, e = a.button, g = a.fromElement;
                                return null == j.pageX && null != a.clientX && (b = j.target.ownerDocument || t, f = b.documentElement, d = b.body, j.pageX = a.clientX + (f && f.scrollLeft || d && d.scrollLeft || 0) - (f && f.clientLeft || d && d.clientLeft || 0), j.pageY = a.clientY + (f && f.scrollTop || d && d.scrollTop || 0) - (f && f.clientTop || d && d.clientTop || 0)), !j.relatedTarget &&
                                g && (j.relatedTarget = g === j.target ? a.toElement : g), !j.which && e !== c && (j.which = e & 1 ? 1 : e & 2 ? 3 : e & 4 ? 2 : 0), j
                            }
                        },
                        fix: function (j) {
                            if (j[f.expando]) return j;
                            var a, b, d = j, e = f.event.fixHooks[j.type] || {},
                                g = e.props ? this.props.concat(e.props) : this.props, j = f.Event(d);
                            for (a = g.length; a;) b = g[--a], j[b] = d[b];
                            return j.target || (j.target = d.srcElement || t), 3 === j.target.nodeType && (j.target = j.target.parentNode), j.metaKey === c && (j.metaKey = j.ctrlKey), e.filter ? e.filter(j, d) : j
                        },
                        special: {
                            ready: {setup: f.bindReady}, load: {noBubble: !0}, focus: {delegateType: "focusin"},
                            blur: {delegateType: "focusout"}, beforeunload: {
                                setup: function (j, a, b) {
                                    f.isWindow(this) && (this.onbeforeunload = b)
                                }, teardown: function (j, a) {
                                    this.onbeforeunload === a && (this.onbeforeunload = null)
                                }
                            }
                        },
                        simulate: function (j, a, b, c) {
                            j = f.extend(new f.Event, b, {type: j, isSimulated: !0, originalEvent: {}});
                            c ? f.event.trigger(j, null, a) : f.event.dispatch.call(a, j);
                            j.isDefaultPrevented() && b.preventDefault()
                        }
                    };
                    f.event.handle = f.event.dispatch;
                    f.removeEvent = t.removeEventListener ? function (j, a, b) {
                        j.removeEventListener && j.removeEventListener(a,
                            b, !1)
                    } : function (j, a, b) {
                        j.detachEvent && j.detachEvent("on" + a, b)
                    };
                    f.Event = function (j, a) {
                        if (!(this instanceof f.Event)) return new f.Event(j, a);
                        j && j.type ? (this.originalEvent = j, this.type = j.type, this.isDefaultPrevented = j.defaultPrevented || !1 === j.returnValue || j.getPreventDefault && j.getPreventDefault() ? y : p) : this.type = j;
                        a && f.extend(this, a);
                        this.timeStamp = j && j.timeStamp || f.now();
                        this[f.expando] = !0
                    };
                    f.Event.prototype = {
                        preventDefault: function () {
                            this.isDefaultPrevented = y;
                            var j = this.originalEvent;
                            j && (j.preventDefault ?
                                j.preventDefault() : j.returnValue = !1)
                        }, stopPropagation: function () {
                            this.isPropagationStopped = y;
                            var j = this.originalEvent;
                            j && (j.stopPropagation && j.stopPropagation(), j.cancelBubble = !0)
                        }, stopImmediatePropagation: function () {
                            this.isImmediatePropagationStopped = y;
                            this.stopPropagation()
                        }, isDefaultPrevented: p, isPropagationStopped: p, isImmediatePropagationStopped: p
                    };
                    f.each({mouseenter: "mouseover", mouseleave: "mouseout"}, function (j, a) {
                        f.event.special[j] = {
                            delegateType: a, bindType: a, handle: function (j) {
                                var b = j.relatedTarget,
                                    c = j.handleObj, d;
                                if (!b || b !== this && !f.contains(this, b)) j.type = c.origType, d = c.handler.apply(this, arguments), j.type = a;
                                return d
                            }
                        }
                    });
                    f.support.submitBubbles || (f.event.special.submit = {
                        setup: function () {
                            if (f.nodeName(this, "form")) return !1;
                            f.event.add(this, "click._submit keypress._submit", function (j) {
                                j = j.target;
                                (j = f.nodeName(j, "input") || f.nodeName(j, "button") ? j.form : c) && !j._submit_attached && (f.event.add(j, "submit._submit", function (j) {
                                    this.parentNode && !j.isTrigger && f.event.simulate("submit", this.parentNode,
                                        j, !0)
                                }), j._submit_attached = !0)
                            })
                        }, teardown: function () {
                            if (f.nodeName(this, "form")) return !1;
                            f.event.remove(this, "._submit")
                        }
                    });
                    f.support.changeBubbles || (f.event.special.change = {
                        setup: function () {
                            if (la.test(this.nodeName)) {
                                if ("checkbox" === this.type || "radio" === this.type) f.event.add(this, "propertychange._change", function (j) {
                                    "checked" === j.originalEvent.propertyName && (this._just_changed = !0)
                                }), f.event.add(this, "click._change", function (j) {
                                    this._just_changed && !j.isTrigger && (this._just_changed = !1, f.event.simulate("change",
                                        this, j, !0))
                                });
                                return !1
                            }
                            f.event.add(this, "beforeactivate._change", function (j) {
                                j = j.target;
                                la.test(j.nodeName) && !j._change_attached && (f.event.add(j, "change._change", function (j) {
                                    this.parentNode && !j.isSimulated && !j.isTrigger && f.event.simulate("change", this.parentNode, j, !0)
                                }), j._change_attached = !0)
                            })
                        }, handle: function (j) {
                            var a = j.target;
                            if (this !== a || j.isSimulated || j.isTrigger || "radio" !== a.type && "checkbox" !== a.type) return j.handleObj.handler.apply(this, arguments)
                        }, teardown: function () {
                            return f.event.remove(this,
                                "._change"), la.test(this.nodeName)
                        }
                    });
                    f.support.focusinBubbles || f.each({focus: "focusin", blur: "focusout"}, function (j, a) {
                        var b = 0, c = function (j) {
                            f.event.simulate(a, j.target, f.event.fix(j), !0)
                        };
                        f.event.special[a] = {
                            setup: function () {
                                0 === b++ && t.addEventListener(j, c, !0)
                            }, teardown: function () {
                                0 === --b && t.removeEventListener(j, c, !0)
                            }
                        }
                    });
                    f.fn.extend({
                        on: function (j, a, b, d, e) {
                            var g, k;
                            if ("object" == typeof j) {
                                "string" != typeof a && (b = a, a = c);
                                for (k in j) this.on(k, a, b, j[k], e);
                                return this
                            }
                            null == b && null == d ? (d = a, b = a = c) : null ==
                                d && ("string" == typeof a ? (d = b, b = c) : (d = b, b = a, a = c));
                            if (!1 === d) d = p; else if (!d) return this;
                            return 1 === e && (g = d, d = function (a) {
                                return f().off(a), g.apply(this, arguments)
                            }, d.guid = g.guid || (g.guid = f.guid++)), this.each(function () {
                                f.event.add(this, j, d, b, a)
                            })
                        }, one: function (a, b, c, f) {
                            return this.on.call(this, a, b, c, f, 1)
                        }, off: function (a, b, d) {
                            if (a && a.preventDefault && a.handleObj) {
                                var e = a.handleObj;
                                return f(a.delegateTarget).off(e.namespace ? e.type + "." + e.namespace : e.type, e.selector, e.handler), this
                            }
                            if ("object" == typeof a) {
                                for (e in a) this.off(e,
                                    b, a[e]);
                                return this
                            }
                            if (!1 === b || "function" == typeof b) d = b, b = c;
                            return !1 === d && (d = p), this.each(function () {
                                f.event.remove(this, a, d, b)
                            })
                        }, bind: function (a, b, c) {
                            return this.on(a, null, b, c)
                        }, unbind: function (a, b) {
                            return this.off(a, null, b)
                        }, live: function (a, b, c) {
                            return f(this.context).on(a, this.selector, b, c), this
                        }, die: function (a, b) {
                            return f(this.context).off(a, this.selector || "**", b), this
                        }, delegate: function (a, b, c, f) {
                            return this.on(b, a, c, f)
                        }, undelegate: function (a, b, c) {
                            return 1 == arguments.length ? this.off(a, "**") :
                                this.off(b, a, c)
                        }, trigger: function (a, b) {
                            return this.each(function () {
                                f.event.trigger(a, b, this)
                            })
                        }, triggerHandler: function (a, b) {
                            if (this[0]) return f.event.trigger(a, b, this[0], !0)
                        }, toggle: function (a) {
                            var b = arguments, c = a.guid || f.guid++, d = 0, e = function (c) {
                                var e = (f._data(this, "lastToggle" + a.guid) || 0) % d;
                                return f._data(this, "lastToggle" + a.guid, e + 1), c.preventDefault(), b[e].apply(this, arguments) || !1
                            };
                            for (e.guid = c; d < b.length;) b[d++].guid = c;
                            return this.click(e)
                        }, hover: function (a, b) {
                            return this.mouseenter(a).mouseleave(b ||
                                a)
                        }
                    });
                    f.each("blur focus focusin focusout load resize scroll unload click dblclick mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave change select submit keydown keypress keyup error contextmenu".split(" "), function (a, b) {
                        f.fn[b] = function (a, j) {
                            return null == j && (j = a, a = null), 0 < arguments.length ? this.on(b, null, a, j) : this.trigger(b)
                        };
                        f.attrFn && (f.attrFn[b] = !0);
                        md.test(b) && (f.event.fixHooks[b] = f.event.keyHooks);
                        nd.test(b) && (f.event.fixHooks[b] = f.event.mouseHooks)
                    });
                    var x = function (a, b, c,
                                      f, d, e) {
                            for (var d = 0, g = f.length; d < g; d++) {
                                var k = f[d];
                                if (k) {
                                    for (var n = !1, k = k[a]; k;) {
                                        if (k[ya] === c) {
                                            n = f[k.sizset];
                                            break
                                        }
                                        1 === k.nodeType && !e && (k[ya] = c, k.sizset = d);
                                        if (k.nodeName.toLowerCase() === b) {
                                            n = k;
                                            break
                                        }
                                        k = k[a]
                                    }
                                    f[d] = n
                                }
                            }
                        }, r = function (a, b, c, f, d, e) {
                            for (var d = 0, g = f.length; d < g; d++) {
                                var k = f[d];
                                if (k) {
                                    for (var n = !1, k = k[a]; k;) {
                                        if (k[ya] === c) {
                                            n = f[k.sizset];
                                            break
                                        }
                                        if (1 === k.nodeType) if (e || (k[ya] = c, k.sizset = d), "string" != typeof b) {
                                            if (k === b) {
                                                n = !0;
                                                break
                                            }
                                        } else if (0 < A.filter(b, [k]).length) {
                                            n = k;
                                            break
                                        }
                                        k = k[a]
                                    }
                                    f[d] = n
                                }
                            }
                        },
                        Ka = /((?:\((?:\([^()]+\)|[^()]+)+\)|\[(?:\[[^\[\]]*\]|['"][^'"]*['"]|[^\[\]'"]+)+\]|\\.|[^ >+~,(\[\\]+)+|[>+~])(\s*,\s*)?((?:.|\r|\n)*)/g,
                        ya = "sizcache" + (Math.random() + "").replace(".", ""), Dc = 0, cc = Object.prototype.toString,
                        ja = !1, Ma = !0, P = /\\/g, Za = /\r\n/g, V = /\W/;
                    [0, 0].sort(function () {
                        return Ma = !1, 0
                    });
                    var A = function (a, b, c, f) {
                        var c = c || [], d = b = b || t;
                        if (1 !== b.nodeType && 9 !== b.nodeType) return [];
                        if (!a || "string" != typeof a) return c;
                        var e, g, k, n, m, x, z = !0, M = A.isXML(b), r = [], ka = a;
                        do if (Ka.exec(""), e = Ka.exec(ka)) if (ka = e[3], r.push(e[1]), e[2]) {
                            n = e[3];
                            break
                        } while (e);
                        if (1 < r.length && Ob.exec(a)) if (2 === r.length && J.relative[r[0]]) g = Ya(r[0] + r[1], b, f); else for (g =
                                                                                                                                         J.relative[r[0]] ? [b] : A(r.shift(), b); r.length;) a = r.shift(), J.relative[a] && (a += r.shift()), g = Ya(a, g, f); else if (!f && 1 < r.length && 9 === b.nodeType && !M && J.match.ID.test(r[0]) && !J.match.ID.test(r[r.length - 1]) && (m = A.find(r.shift(), b, M), b = m.expr ? A.filter(m.expr, m.set)[0] : m.set[0]), b) {
                            m = f ? {
                                expr: r.pop(),
                                set: Na(f)
                            } : A.find(r.pop(), 1 !== r.length || "~" !== r[0] && "+" !== r[0] || !b.parentNode ? b : b.parentNode, M);
                            g = m.expr ? A.filter(m.expr, m.set) : m.set;
                            for (0 < r.length ? k = Na(g) : z = !1; r.length;) e = x = r.pop(), J.relative[x] ? e = r.pop() : x =
                                "", null == e && (e = b), J.relative[x](k, e, M)
                        } else k = [];
                        k || (k = g);
                        k || A.error(x || a);
                        if ("[object Array]" === cc.call(k)) if (z) if (b && 1 === b.nodeType) for (a = 0; null != k[a]; a++) k[a] && (!0 === k[a] || 1 === k[a].nodeType && A.contains(b, k[a])) && c.push(g[a]); else for (a = 0; null != k[a]; a++) k[a] && 1 === k[a].nodeType && c.push(g[a]); else c.push.apply(c, k); else Na(k, c);
                        return n && (A(n, d, c, f), A.uniqueSort(c)), c
                    };
                    A.uniqueSort = function (a) {
                        if (dc && (ja = Ma, a.sort(dc), ja)) for (var b = 1; b < a.length; b++) a[b] === a[b - 1] && a.splice(b--, 1);
                        return a
                    };
                    A.matches =
                        function (a, b) {
                            return A(a, null, null, b)
                        };
                    A.matchesSelector = function (a, b) {
                        return 0 < A(b, null, null, [a]).length
                    };
                    A.find = function (a, b, c) {
                        var f, d, e, g, k, n;
                        if (!a) return [];
                        d = 0;
                        for (e = J.order.length; d < e; d++) if (k = J.order[d], g = J.leftMatch[k].exec(a)) if (n = g[1], g.splice(1, 1), "\\" !== n.substr(n.length - 1) && (g[1] = (g[1] || "").replace(P, ""), f = J.find[k](g, b, c), null != f)) {
                            a = a.replace(J.match[k], "");
                            break
                        }
                        return f || (f = "undefined" != typeof b.getElementsByTagName ? b.getElementsByTagName("*") : []), {
                            set: f,
                            expr: a
                        }
                    };
                    A.filter = function (a,
                                         b, f, d) {
                        for (var e, g, k, n, m, x, z, r, M = a, ka = [], Z = b, p = b && b[0] && A.isXML(b[0]); a && b.length;) {
                            for (k in J.filter) if (null != (e = J.leftMatch[k].exec(a)) && e[2]) if (x = J.filter[k], m = e[1], g = !1, e.splice(1, 1), "\\" !== m.substr(m.length - 1)) {
                                Z === ka && (ka = []);
                                if (J.preFilter[k]) if (e = J.preFilter[k](e, Z, f, ka, d, p)) {
                                    if (!0 === e) continue
                                } else g = n = !0;
                                if (e) for (z = 0; null != (m = Z[z]); z++) m && (n = x(m, e, z, Z), r = d ^ n, f && null != n ? r ? g = !0 : Z[z] = !1 : r && (ka.push(m), g = !0));
                                if (n !== c) {
                                    f || (Z = ka);
                                    a = a.replace(J.match[k], "");
                                    if (!g) return [];
                                    break
                                }
                            }
                            if (a === M) {
                                if (null !=
                                    g) break;
                                A.error(a)
                            }
                            M = a
                        }
                        return Z
                    };
                    A.error = function (a) {
                        throw Error("Syntax error, unrecognized expression: " + a);
                    };
                    var ma = A.getText = function (a) {
                        var b, c;
                        b = a.nodeType;
                        var f = "";
                        if (b) if (1 === b || 9 === b) {
                            if ("string" == typeof a.textContent) return a.textContent;
                            if ("string" == typeof a.innerText) return a.innerText.replace(Za, "");
                            for (a = a.firstChild; a; a = a.nextSibling) f += ma(a)
                        } else {
                            if (3 === b || 4 === b) return a.nodeValue
                        } else for (b = 0; c = a[b]; b++) 8 !== c.nodeType && (f += ma(c));
                        return f
                    }, J = A.selectors = {
                        order: ["ID", "NAME", "TAG"],
                        match: {
                            ID: /#((?:[\w\u00c0-\uFFFF\-]|\\.)+)/,
                            CLASS: /\.((?:[\w\u00c0-\uFFFF\-]|\\.)+)/,
                            NAME: /\[name=['"]*((?:[\w\u00c0-\uFFFF\-]|\\.)+)['"]*\]/,
                            ATTR: /\[\s*((?:[\w\u00c0-\uFFFF\-]|\\.)+)\s*(?:(\S?=)\s*(?:(['"])(.*?)\3|(#?(?:[\w\u00c0-\uFFFF\-]|\\.)*)|)|)\s*\]/,
                            TAG: /^((?:[\w\u00c0-\uFFFF\*\-]|\\.)+)/,
                            CHILD: /:(only|nth|last|first)-child(?:\(\s*(even|odd|(?:[+\-]?\d+|(?:[+\-]?\d*)?n\s*(?:[+\-]\s*\d+)?))\s*\))?/,
                            POS: /:(nth|eq|gt|lt|first|last|even|odd)(?:\((\d*)\))?(?=[^\-]|$)/,
                            PSEUDO: /:((?:[\w\u00c0-\uFFFF\-]|\\.)+)(?:\((['"]?)((?:\([^\)]+\)|[^\(\)]*)+)\2\))?/
                        },
                        leftMatch: {},
                        attrMap: {"class": "className", "for": "htmlFor"},
                        attrHandle: {
                            href: function (a) {
                                return a.getAttribute("href")
                            }, type: function (a) {
                                return a.getAttribute("type")
                            }
                        },
                        relative: {
                            "+": function (a, b) {
                                var c = "string" == typeof b, f = c && !V.test(b), c = c && !f;
                                f && (b = b.toLowerCase());
                                for (var f = 0, d = a.length, e; f < d; f++) if (e = a[f]) {
                                    for (; (e = e.previousSibling) && 1 !== e.nodeType;) ;
                                    a[f] = c || e && e.nodeName.toLowerCase() === b ? e || !1 : e === b
                                }
                                c && A.filter(b, a, !0)
                            }, ">": function (a, b) {
                                var c, f = "string" == typeof b, d = 0, e = a.length;
                                if (f && !V.test(b)) for (b =
                                                              b.toLowerCase(); d < e; d++) {
                                    if (c = a[d]) c = c.parentNode, a[d] = c.nodeName.toLowerCase() === b ? c : !1
                                } else {
                                    for (; d < e; d++) (c = a[d]) && (a[d] = f ? c.parentNode : c.parentNode === b);
                                    f && A.filter(b, a, !0)
                                }
                            }, "": function (a, b, c) {
                                var f, d = Dc++, e = r;
                                "string" == typeof b && !V.test(b) && (b = b.toLowerCase(), f = b, e = x);
                                e("parentNode", b, d, a, f, c)
                            }, "~": function (a, b, c) {
                                var f, d = Dc++, e = r;
                                "string" == typeof b && !V.test(b) && (b = b.toLowerCase(), f = b, e = x);
                                e("previousSibling", b, d, a, f, c)
                            }
                        },
                        find: {
                            ID: function (a, b, c) {
                                if ("undefined" != typeof b.getElementById && !c) return (a =
                                    b.getElementById(a[1])) && a.parentNode ? [a] : []
                            }, NAME: function (a, b) {
                                if ("undefined" != typeof b.getElementsByName) {
                                    for (var c = [], f = b.getElementsByName(a[1]), d = 0, e = f.length; d < e; d++) f[d].getAttribute("name") === a[1] && c.push(f[d]);
                                    return 0 === c.length ? null : c
                                }
                            }, TAG: function (a, b) {
                                if ("undefined" != typeof b.getElementsByTagName) return b.getElementsByTagName(a[1])
                            }
                        },
                        preFilter: {
                            CLASS: function (a, b, c, f, d, e) {
                                a = " " + a[1].replace(P, "") + " ";
                                if (e) return a;
                                for (var e = 0, g; null != (g = b[e]); e++) g && (d ^ (g.className && 0 <= (" " + g.className +
                                    " ").replace(/[\t\n\r]/g, " ").indexOf(a)) ? c || f.push(g) : c && (b[e] = !1));
                                return !1
                            }, ID: function (a) {
                                return a[1].replace(P, "")
                            }, TAG: function (a) {
                                return a[1].replace(P, "").toLowerCase()
                            }, CHILD: function (a) {
                                if ("nth" === a[1]) {
                                    a[2] || A.error(a[0]);
                                    a[2] = a[2].replace(/^\+|\s*/g, "");
                                    var b = /(-?)(\d*)(?:n([+\-]?\d*))?/.exec("even" === a[2] && "2n" || "odd" === a[2] && "2n+1" || !/\D/.test(a[2]) && "0n+" + a[2] || a[2]);
                                    a[2] = b[1] + (b[2] || 1) - 0;
                                    a[3] = b[3] - 0
                                } else a[2] && A.error(a[0]);
                                return a[0] = Dc++, a
                            }, ATTR: function (a, b, c, f, d, e) {
                                b = a[1] = a[1].replace(P,
                                    "");
                                return !e && J.attrMap[b] && (a[1] = J.attrMap[b]), a[4] = (a[4] || a[5] || "").replace(P, ""), "~=" === a[2] && (a[4] = " " + a[4] + " "), a
                            }, PSEUDO: function (a, b, c, f, d) {
                                if ("not" === a[1]) {
                                    if (1 >= (Ka.exec(a[3]) || "").length && !/^\w/.test(a[3])) return a = A.filter(a[3], b, c, 1 ^ d), c || f.push.apply(f, a), !1;
                                    a[3] = A(a[3], null, null, b)
                                } else if (J.match.POS.test(a[0]) || J.match.CHILD.test(a[0])) return !0;
                                return a
                            }, POS: function (a) {
                                return a.unshift(!0), a
                            }
                        },
                        filters: {
                            enabled: function (a) {
                                return !1 === a.disabled && "hidden" !== a.type
                            }, disabled: function (a) {
                                return !0 ===
                                    a.disabled
                            }, checked: function (a) {
                                return !0 === a.checked
                            }, selected: function (a) {
                                return a.parentNode && a.parentNode.selectedIndex, !0 === a.selected
                            }, parent: function (a) {
                                return !!a.firstChild
                            }, empty: function (a) {
                                return !a.firstChild
                            }, has: function (a, b, c) {
                                return !!A(c[3], a).length
                            }, header: function (a) {
                                return /h\d/i.test(a.nodeName)
                            }, text: function (a) {
                                var b = a.getAttribute("type"), c = a.type;
                                return "input" === a.nodeName.toLowerCase() && "text" === c && (b === c || null === b)
                            }, radio: function (a) {
                                return "input" === a.nodeName.toLowerCase() &&
                                    "radio" === a.type
                            }, checkbox: function (a) {
                                return "input" === a.nodeName.toLowerCase() && "checkbox" === a.type
                            }, file: function (a) {
                                return "input" === a.nodeName.toLowerCase() && "file" === a.type
                            }, password: function (a) {
                                return "input" === a.nodeName.toLowerCase() && "password" === a.type
                            }, submit: function (a) {
                                var b = a.nodeName.toLowerCase();
                                return ("input" === b || "button" === b) && "submit" === a.type
                            }, image: function (a) {
                                return "input" === a.nodeName.toLowerCase() && "image" === a.type
                            }, reset: function (a) {
                                var b = a.nodeName.toLowerCase();
                                return ("input" ===
                                    b || "button" === b) && "reset" === a.type
                            }, button: function (a) {
                                var b = a.nodeName.toLowerCase();
                                return "input" === b && "button" === a.type || "button" === b
                            }, input: function (a) {
                                return /input|select|textarea|button/i.test(a.nodeName)
                            }, focus: function (a) {
                                return a === a.ownerDocument.activeElement
                            }
                        },
                        setFilters: {
                            first: function (a, b) {
                                return 0 === b
                            }, last: function (a, b, c, f) {
                                return b === f.length - 1
                            }, even: function (a, b) {
                                return 0 === b % 2
                            }, odd: function (a, b) {
                                return 1 === b % 2
                            }, lt: function (a, b, c) {
                                return b < c[3] - 0
                            }, gt: function (a, b, c) {
                                return b > c[3] -
                                    0
                            }, nth: function (a, b, c) {
                                return c[3] - 0 === b
                            }, eq: function (a, b, c) {
                                return c[3] - 0 === b
                            }
                        },
                        filter: {
                            PSEUDO: function (a, b, c, f) {
                                var d = b[1], e = J.filters[d];
                                if (e) return e(a, c, b, f);
                                if ("contains" === d) return 0 <= (a.textContent || a.innerText || ma([a]) || "").indexOf(b[3]);
                                if ("not" === d) {
                                    b = b[3];
                                    c = 0;
                                    for (f = b.length; c < f; c++) if (b[c] === a) return !1;
                                    return !0
                                }
                                A.error(d)
                            }, CHILD: function (a, b) {
                                var c, f, d, e, g, k;
                                c = b[1];
                                var n = a;
                                switch (c) {
                                    case "only":
                                    case "first":
                                        for (; n = n.previousSibling;) if (1 === n.nodeType) return !1;
                                        if ("first" === c) return !0;
                                        n =
                                            a;
                                    case "last":
                                        for (; n = n.nextSibling;) if (1 === n.nodeType) return !1;
                                        return !0;
                                    case "nth":
                                        c = b[2];
                                        f = b[3];
                                        if (1 === c && 0 === f) return !0;
                                        d = b[0];
                                        if ((e = a.parentNode) && (e[ya] !== d || !a.nodeIndex)) {
                                            g = 0;
                                            for (n = e.firstChild; n; n = n.nextSibling) 1 === n.nodeType && (n.nodeIndex = ++g);
                                            e[ya] = d
                                        }
                                        return k = a.nodeIndex - f, 0 === c ? 0 === k : 0 === k % c && 0 <= k / c
                                }
                            }, ID: function (a, b) {
                                return 1 === a.nodeType && a.getAttribute("id") === b
                            }, TAG: function (a, b) {
                                return "*" === b && 1 === a.nodeType || !!a.nodeName && a.nodeName.toLowerCase() === b
                            }, CLASS: function (a, b) {
                                return -1 <
                                    (" " + (a.className || a.getAttribute("class")) + " ").indexOf(b)
                            }, ATTR: function (a, b) {
                                var c = b[1],
                                    c = A.attr ? A.attr(a, c) : J.attrHandle[c] ? J.attrHandle[c](a) : null != a[c] ? a[c] : a.getAttribute(c),
                                    f = c + "", d = b[2], e = b[4];
                                return null == c ? "!=" === d : !d && A.attr ? null != c : "=" === d ? f === e : "*=" === d ? 0 <= f.indexOf(e) : "~=" === d ? 0 <= (" " + f + " ").indexOf(e) : e ? "!=" === d ? f !== e : "^=" === d ? 0 === f.indexOf(e) : "$=" === d ? f.substr(f.length - e.length) === e : "|=" === d ? f === e || f.substr(0, e.length + 1) === e + "-" : !1 : f && !1 !== c
                            }, POS: function (a, b, c, f) {
                                var d = J.setFilters[b[2]];
                                if (d) return d(a, c, b, f)
                            }
                        }
                    }, Ob = J.match.POS, od = function (a, b) {
                        return "\\" + (b - 0 + 1)
                    }, Pb;
                    for (Pb in J.match) J.match[Pb] = RegExp(J.match[Pb].source + /(?![^\[]*\])(?![^\(]*\))/.source), J.leftMatch[Pb] = RegExp(/(^(?:.|\r|\n)*?)/.source + J.match[Pb].source.replace(/\\(\d+)/g, od));
                    var Na = function (a, b) {
                        return a = Array.prototype.slice.call(a, 0), b ? (b.push.apply(b, a), b) : a
                    };
                    try {
                        Array.prototype.slice.call(t.documentElement.childNodes, 0)[0].nodeType
                    } catch (vd) {
                        Na = function (a, b) {
                            var c = 0, f = b || [];
                            if ("[object Array]" === cc.call(a)) Array.prototype.push.apply(f,
                                a); else if ("number" == typeof a.length) for (var d = a.length; c < d; c++) f.push(a[c]); else for (; a[c]; c++) f.push(a[c]);
                            return f
                        }
                    }
                    var dc, Qb;
                    t.documentElement.compareDocumentPosition ? dc = function (a, b) {
                        return a === b ? (ja = !0, 0) : !a.compareDocumentPosition || !b.compareDocumentPosition ? a.compareDocumentPosition ? -1 : 1 : a.compareDocumentPosition(b) & 4 ? -1 : 1
                    } : (dc = function (a, b) {
                        if (a === b) return ja = !0, 0;
                        if (a.sourceIndex && b.sourceIndex) return a.sourceIndex - b.sourceIndex;
                        var c, f, d = [], e = [];
                        c = a.parentNode;
                        f = b.parentNode;
                        var g = c;
                        if (c ===
                            f) return Qb(a, b);
                        if (!c) return -1;
                        if (!f) return 1;
                        for (; g;) d.unshift(g), g = g.parentNode;
                        for (g = f; g;) e.unshift(g), g = g.parentNode;
                        c = d.length;
                        f = e.length;
                        for (g = 0; g < c && g < f; g++) if (d[g] !== e[g]) return Qb(d[g], e[g]);
                        return g === c ? Qb(a, e[g], -1) : Qb(d[g], b, 1)
                    }, Qb = function (a, b, c) {
                        if (a === b) return c;
                        for (a = a.nextSibling; a;) {
                            if (a === b) return -1;
                            a = a.nextSibling
                        }
                        return 1
                    });
                    var ec = t.createElement("div"), Xc = "script" + (new Date).getTime(), fc = t.documentElement;
                    ec.innerHTML = "<a name='" + Xc + "'/>";
                    fc.insertBefore(ec, fc.firstChild);
                    t.getElementById(Xc) &&
                    (J.find.ID = function (a, b, f) {
                        if ("undefined" != typeof b.getElementById && !f) return (b = b.getElementById(a[1])) ? b.id === a[1] || "undefined" != typeof b.getAttributeNode && b.getAttributeNode("id").nodeValue === a[1] ? [b] : c : []
                    }, J.filter.ID = function (a, b) {
                        var c = "undefined" != typeof a.getAttributeNode && a.getAttributeNode("id");
                        return 1 === a.nodeType && c && c.nodeValue === b
                    });
                    fc.removeChild(ec);
                    var fc = ec = null, fb = t.createElement("div");
                    fb.appendChild(t.createComment(""));
                    0 < fb.getElementsByTagName("*").length && (J.find.TAG = function (a,
                                                                                       b) {
                        var c = b.getElementsByTagName(a[1]);
                        if ("*" === a[1]) {
                            for (var f = [], d = 0; c[d]; d++) 1 === c[d].nodeType && f.push(c[d]);
                            c = f
                        }
                        return c
                    });
                    fb.innerHTML = "<a href='#'></a>";
                    fb.firstChild && "undefined" != typeof fb.firstChild.getAttribute && "#" !== fb.firstChild.getAttribute("href") && (J.attrHandle.href = function (a) {
                        return a.getAttribute("href", 2)
                    });
                    fb = null;
                    if (t.querySelectorAll) {
                        var Ec = A, gc = t.createElement("div");
                        gc.innerHTML = "<p class='TEST'></p>";
                        if (!(gc.querySelectorAll && 0 === gc.querySelectorAll(".TEST").length)) {
                            var A =
                                function (a, b, c, f) {
                                    b = b || t;
                                    if (!f && !A.isXML(b)) {
                                        var d = /^(\w+$)|^\.([\w\-]+$)|^#([\w\-]+$)/.exec(a);
                                        if (d && (1 === b.nodeType || 9 === b.nodeType)) {
                                            if (d[1]) return Na(b.getElementsByTagName(a), c);
                                            if (d[2] && J.find.CLASS && b.getElementsByClassName) return Na(b.getElementsByClassName(d[2]), c)
                                        }
                                        if (9 === b.nodeType) {
                                            if ("body" === a && b.body) return Na([b.body], c);
                                            if (d && d[3]) {
                                                var e = b.getElementById(d[3]);
                                                if (!e || !e.parentNode) return Na([], c);
                                                if (e.id === d[3]) return Na([e], c)
                                            }
                                            try {
                                                return Na(b.querySelectorAll(a), c)
                                            } catch (g) {
                                            }
                                        } else if (1 ===
                                            b.nodeType && "object" !== b.nodeName.toLowerCase()) {
                                            var d = b, k = (e = b.getAttribute("id")) || "__sizzle__", n = b.parentNode,
                                                m = /^\s*[+~]/.test(a);
                                            e ? k = k.replace(/'/g, "\\$&") : b.setAttribute("id", k);
                                            m && n && (b = b.parentNode);
                                            try {
                                                if (!m || n) return Na(b.querySelectorAll("[id='" + k + "'] " + a), c)
                                            } catch (x) {
                                            } finally {
                                                e || d.removeAttribute("id")
                                            }
                                        }
                                    }
                                    return Ec(a, b, c, f)
                                }, Fc;
                            for (Fc in Ec) A[Fc] = Ec[Fc];
                            gc = null
                        }
                    }
                    var hc = t.documentElement,
                        Pa = hc.matchesSelector || hc.mozMatchesSelector || hc.webkitMatchesSelector || hc.msMatchesSelector;
                    if (Pa) {
                        var bb =
                            !Pa.call(t.createElement("div"), "div"), Xa = !1;
                        try {
                            Pa.call(t.documentElement, "[test!='']:sizzle")
                        } catch (qb) {
                            Xa = !0
                        }
                        A.matchesSelector = function (a, b) {
                            b = b.replace(/\=\s*([^'"\]]*)\s*\]/g, "='$1']");
                            if (!A.isXML(a)) try {
                                if (Xa || !J.match.PSEUDO.test(b) && !/!=/.test(b)) {
                                    var c = Pa.call(a, b);
                                    if (c || !bb || a.document && 11 !== a.document.nodeType) return c
                                }
                            } catch (f) {
                            }
                            return 0 < A(b, null, null, [a]).length
                        }
                    }
                    var yb = t.createElement("div");
                    yb.innerHTML = "<div class='test e'></div><div class='test'></div>";
                    yb.getElementsByClassName &&
                    0 !== yb.getElementsByClassName("e").length && (yb.lastChild.className = "e", 1 !== yb.getElementsByClassName("e").length && (J.order.splice(1, 0, "CLASS"), J.find.CLASS = function (a, b, c) {
                        if ("undefined" != typeof b.getElementsByClassName && !c) return b.getElementsByClassName(a[1])
                    }, yb = null));
                    t.documentElement.contains ? A.contains = function (a, b) {
                        return a !== b && (a.contains ? a.contains(b) : !0)
                    } : t.documentElement.compareDocumentPosition ? A.contains = function (a, b) {
                        return !!(a.compareDocumentPosition(b) & 16)
                    } : A.contains = function () {
                        return !1
                    };
                    A.isXML = function (a) {
                        return (a = (a ? a.ownerDocument || a : 0).documentElement) ? "HTML" !== a.nodeName : !1
                    };
                    var Ya = function (a, b, c) {
                        for (var f, d = [], e = "", b = b.nodeType ? [b] : b; f = J.match.PSEUDO.exec(a);) e += f[0], a = a.replace(J.match.PSEUDO, "");
                        a = J.relative[a] ? a + "*" : a;
                        f = 0;
                        for (var g = b.length; f < g; f++) A(a, b[f], d, c);
                        return A.filter(e, d)
                    };
                    A.attr = f.attr;
                    A.selectors.attrMap = {};
                    f.find = A;
                    f.expr = A.selectors;
                    f.expr[":"] = f.expr.filters;
                    f.unique = A.uniqueSort;
                    f.text = A.getText;
                    f.isXMLDoc = A.isXML;
                    f.contains = A.contains;
                    var kb = /Until$/,
                        lb = /^(?:parents|prevUntil|prevAll)/, mb = /,/, ob = /^.[^:#\[\.,]*$/,
                        pb = Array.prototype.slice, cb = f.expr.match.POS,
                        sb = {children: !0, contents: !0, next: !0, prev: !0};
                    f.fn.extend({
                        find: function (a) {
                            var b = this, c, d;
                            if ("string" != typeof a) return f(a).filter(function () {
                                c = 0;
                                for (d = b.length; c < d; c++) if (f.contains(b[c], this)) return !0
                            });
                            var e = this.pushStack("", "find", a), g, k, n;
                            c = 0;
                            for (d = this.length; c < d; c++) if (g = e.length, f.find(a, this[c], e), 0 < c) for (k = g; k < e.length; k++) for (n = 0; n < g; n++) if (e[n] === e[k]) {
                                e.splice(k--, 1);
                                break
                            }
                            return e
                        },
                        has: function (a) {
                            var b = f(a);
                            return this.filter(function () {
                                for (var a = 0, j = b.length; a < j; a++) if (f.contains(this, b[a])) return !0
                            })
                        }, not: function (a) {
                            return this.pushStack(w(this, a, !1), "not", a)
                        }, filter: function (a) {
                            return this.pushStack(w(this, a, !0), "filter", a)
                        }, is: function (a) {
                            return !!a && ("string" == typeof a ? cb.test(a) ? 0 <= f(a, this.context).index(this[0]) : 0 < f.filter(a, this).length : 0 < this.filter(a).length)
                        }, closest: function (a, b) {
                            var c = [], d, e, g = this[0];
                            if (f.isArray(a)) {
                                for (e = 1; g && g.ownerDocument && g !== b;) {
                                    for (d =
                                             0; d < a.length; d++) f(g).is(a[d]) && c.push({
                                        selector: a[d],
                                        elem: g,
                                        level: e
                                    });
                                    g = g.parentNode;
                                    e++
                                }
                                return c
                            }
                            var k = cb.test(a) || "string" != typeof a ? f(a, b || this.context) : 0;
                            d = 0;
                            for (e = this.length; d < e; d++) for (g = this[d]; g;) {
                                if (k ? -1 < k.index(g) : f.find.matchesSelector(g, a)) {
                                    c.push(g);
                                    break
                                }
                                g = g.parentNode;
                                if (!g || !g.ownerDocument || g === b || 11 === g.nodeType) break
                            }
                            return c = 1 < c.length ? f.unique(c) : c, this.pushStack(c, "closest", a)
                        }, index: function (a) {
                            return a ? "string" == typeof a ? f.inArray(this[0], f(a)) : f.inArray(a.jquery ? a[0] : a,
                                this) : this[0] && this[0].parentNode ? this.prevAll().length : -1
                        }, add: function (a, b) {
                            var c = "string" == typeof a ? f(a, b) : f.makeArray(a && a.nodeType ? [a] : a),
                                d = f.merge(this.get(), c);
                            return this.pushStack(!c[0] || !c[0].parentNode || 11 === c[0].parentNode.nodeType || !d[0] || !d[0].parentNode || 11 === d[0].parentNode.nodeType ? d : f.unique(d))
                        }, andSelf: function () {
                            return this.add(this.prevObject)
                        }
                    });
                    f.each({
                        parent: function (a) {
                            return (a = a.parentNode) && 11 !== a.nodeType ? a : null
                        }, parents: function (a) {
                            return f.dir(a, "parentNode")
                        }, parentsUntil: function (a,
                                                   b, c) {
                            return f.dir(a, "parentNode", c)
                        }, next: function (a) {
                            return f.nth(a, 2, "nextSibling")
                        }, prev: function (a) {
                            return f.nth(a, 2, "previousSibling")
                        }, nextAll: function (a) {
                            return f.dir(a, "nextSibling")
                        }, prevAll: function (a) {
                            return f.dir(a, "previousSibling")
                        }, nextUntil: function (a, b, c) {
                            return f.dir(a, "nextSibling", c)
                        }, prevUntil: function (a, b, c) {
                            return f.dir(a, "previousSibling", c)
                        }, siblings: function (a) {
                            return f.sibling(a.parentNode.firstChild, a)
                        }, children: function (a) {
                            return f.sibling(a.firstChild)
                        }, contents: function (a) {
                            return f.nodeName(a,
                                "iframe") ? a.contentDocument || a.contentWindow.document : f.makeArray(a.childNodes)
                        }
                    }, function (a, b) {
                        f.fn[a] = function (c, d) {
                            var e = f.map(this, b, c);
                            return kb.test(a) || (d = c), d && "string" == typeof d && (e = f.filter(d, e)), e = 1 < this.length && !sb[a] ? f.unique(e) : e, (1 < this.length || mb.test(d)) && lb.test(a) && (e = e.reverse()), this.pushStack(e, a, pb.call(arguments).join(","))
                        }
                    });
                    f.extend({
                        filter: function (a, b, c) {
                            return c && (a = ":not(" + a + ")"), 1 === b.length ? f.find.matchesSelector(b[0], a) ? [b[0]] : [] : f.find.matches(a, b)
                        }, dir: function (a,
                                          b, d) {
                            for (var e = [], a = a[b]; a && 9 !== a.nodeType && (d === c || 1 !== a.nodeType || !f(a).is(d));) 1 === a.nodeType && e.push(a), a = a[b];
                            return e
                        }, nth: function (a, b, c) {
                            for (var b = b || 1, f = 0; a && !(1 === a.nodeType && ++f === b); a = a[c]) ;
                            return a
                        }, sibling: function (a, b) {
                            for (var c = []; a; a = a.nextSibling) 1 === a.nodeType && a !== b && c.push(a);
                            return c
                        }
                    });
                    var db = "abbr|article|aside|audio|canvas|datalist|details|figcaption|figure|footer|header|hgroup|mark|meter|nav|output|progress|section|summary|time|video",
                        Ab = / jQuery\d+="(?:\d+|null)"/g, $a = /^\s+/,
                        jb = /<(?!area|br|col|embed|hr|img|input|link|meta|param)(([\w:]+)[^>]*)\/>/ig,
                        nb = /<([\w:]+)/, Db = /<tbody/i, Eb = /<|&#?\w+;/, Gb = /<(?:script|style)/i,
                        Hb = /<(?:script|object|embed|option|style)/i, Bb = RegExp("<(?:" + db + ")", "i"),
                        Cb = /checked\s*(?:[^=]|=\s*.checked.)/i, Sb = /\/(java|ecma)script/i,
                        Ub = /^\s*<!(?:\[CDATA\[|\-\-)/, Ba = {
                            option: [1, "<select multiple='multiple'>", "</select>"],
                            legend: [1, "<fieldset>", "</fieldset>"],
                            thead: [1, "<table>", "</table>"],
                            tr: [2, "<table><tbody>", "</tbody></table>"],
                            td: [3, "<table><tbody><tr>",
                                "</tr></tbody></table>"],
                            col: [2, "<table><tbody></tbody><colgroup>", "</colgroup></table>"],
                            area: [1, "<map>", "</map>"],
                            _default: [0, "", ""]
                        }, Fb = q(t);
                    Ba.optgroup = Ba.option;
                    Ba.tbody = Ba.tfoot = Ba.colgroup = Ba.caption = Ba.thead;
                    Ba.th = Ba.td;
                    f.support.htmlSerialize || (Ba._default = [1, "div<div>", "</div>"]);
                    f.fn.extend({
                        text: function (a) {
                            return f.isFunction(a) ? this.each(function (b) {
                                var c = f(this);
                                c.text(a.call(this, b, c.text()))
                            }) : "object" != typeof a && a !== c ? this.empty().append((this[0] && this[0].ownerDocument || t).createTextNode(a)) :
                                f.text(this)
                        }, wrapAll: function (a) {
                            if (f.isFunction(a)) return this.each(function (b) {
                                f(this).wrapAll(a.call(this, b))
                            });
                            if (this[0]) {
                                var b = f(a, this[0].ownerDocument).eq(0).clone(!0);
                                this[0].parentNode && b.insertBefore(this[0]);
                                b.map(function () {
                                    for (var a = this; a.firstChild && 1 === a.firstChild.nodeType;) a = a.firstChild;
                                    return a
                                }).append(this)
                            }
                            return this
                        }, wrapInner: function (a) {
                            return f.isFunction(a) ? this.each(function (b) {
                                f(this).wrapInner(a.call(this, b))
                            }) : this.each(function () {
                                var b = f(this), c = b.contents();
                                c.length ?
                                    c.wrapAll(a) : b.append(a)
                            })
                        }, wrap: function (a) {
                            var b = f.isFunction(a);
                            return this.each(function (c) {
                                f(this).wrapAll(b ? a.call(this, c) : a)
                            })
                        }, unwrap: function () {
                            return this.parent().each(function () {
                                f.nodeName(this, "body") || f(this).replaceWith(this.childNodes)
                            }).end()
                        }, append: function () {
                            return this.domManip(arguments, !0, function (a) {
                                1 === this.nodeType && this.appendChild(a)
                            })
                        }, prepend: function () {
                            return this.domManip(arguments, !0, function (a) {
                                1 === this.nodeType && this.insertBefore(a, this.firstChild)
                            })
                        }, before: function () {
                            if (this[0] &&
                                this[0].parentNode) return this.domManip(arguments, !1, function (a) {
                                this.parentNode.insertBefore(a, this)
                            });
                            if (arguments.length) {
                                var a = f.clean(arguments);
                                return a.push.apply(a, this.toArray()), this.pushStack(a, "before", arguments)
                            }
                        }, after: function () {
                            if (this[0] && this[0].parentNode) return this.domManip(arguments, !1, function (a) {
                                this.parentNode.insertBefore(a, this.nextSibling)
                            });
                            if (arguments.length) {
                                var a = this.pushStack(this, "after", arguments);
                                return a.push.apply(a, f.clean(arguments)), a
                            }
                        }, remove: function (a,
                                             b) {
                            for (var c = 0, d; null != (d = this[c]); c++) if (!a || f.filter(a, [d]).length) !b && 1 === d.nodeType && (f.cleanData(d.getElementsByTagName("*")), f.cleanData([d])), d.parentNode && d.parentNode.removeChild(d);
                            return this
                        }, empty: function () {
                            for (var a = 0, b; null != (b = this[a]); a++) for (1 === b.nodeType && f.cleanData(b.getElementsByTagName("*")); b.firstChild;) b.removeChild(b.firstChild);
                            return this
                        }, clone: function (a, b) {
                            return a = null == a ? !1 : a, b = null == b ? a : b, this.map(function () {
                                return f.clone(this, a, b)
                            })
                        }, html: function (a) {
                            if (a ===
                                c) return this[0] && 1 === this[0].nodeType ? this[0].innerHTML.replace(Ab, "") : null;
                            if ("string" == typeof a && !Gb.test(a) && (f.support.leadingWhitespace || !$a.test(a)) && !Ba[(nb.exec(a) || ["", ""])[1].toLowerCase()]) {
                                a = a.replace(jb, "<$1></$2>");
                                try {
                                    for (var b = 0, d = this.length; b < d; b++) 1 === this[b].nodeType && (f.cleanData(this[b].getElementsByTagName("*")), this[b].innerHTML = a)
                                } catch (e) {
                                    this.empty().append(a)
                                }
                            } else f.isFunction(a) ? this.each(function (b) {
                                var c = f(this);
                                c.html(a.call(this, b, c.html()))
                            }) : this.empty().append(a);
                            return this
                        }, replaceWith: function (a) {
                            return this[0] && this[0].parentNode ? f.isFunction(a) ? this.each(function (b) {
                                var c = f(this), d = c.html();
                                c.replaceWith(a.call(this, b, d))
                            }) : ("string" != typeof a && (a = f(a).detach()), this.each(function () {
                                var b = this.nextSibling, c = this.parentNode;
                                f(this).remove();
                                b ? f(b).before(a) : f(c).append(a)
                            })) : this.length ? this.pushStack(f(f.isFunction(a) ? a() : a), "replaceWith", a) : this
                        }, detach: function (a) {
                            return this.remove(a, !0)
                        }, domManip: function (a, b, d) {
                            var e, g, k, n = a[0], m = [];
                            if (!f.support.checkClone &&
                                3 === arguments.length && "string" == typeof n && Cb.test(n)) return this.each(function () {
                                f(this).domManip(a, b, d, !0)
                            });
                            if (f.isFunction(n)) return this.each(function (e) {
                                var g = f(this);
                                a[0] = n.call(this, e, b ? g.html() : c);
                                g.domManip(a, b, d)
                            });
                            if (this[0]) {
                                k = n && n.parentNode;
                                f.support.parentNode && k && 11 === k.nodeType && k.childNodes.length === this.length ? e = {fragment: k} : e = f.buildFragment(a, this, m);
                                k = e.fragment;
                                1 === k.childNodes.length ? g = k = k.firstChild : g = k.firstChild;
                                if (g) {
                                    b = b && f.nodeName(g, "tr");
                                    g = 0;
                                    for (var x = this.length, z =
                                        x - 1; g < x; g++) d.call(b ? f.nodeName(this[g], "table") ? this[g].getElementsByTagName("tbody")[0] || this[g].appendChild(this[g].ownerDocument.createElement("tbody")) : this[g] : this[g], e.cacheable || 1 < x && g < z ? f.clone(k, !0, !0) : k)
                                }
                                m.length && f.each(m, L)
                            }
                            return this
                        }
                    });
                    f.buildFragment = function (a, b, c) {
                        var d, e, g, k, n = a[0];
                        return b && b[0] && (k = b[0].ownerDocument || b[0]), k.createDocumentFragment || (k = t), 1 === a.length && "string" == typeof n && 512 > n.length && k === t && "<" === n.charAt(0) && !Hb.test(n) && (f.support.checkClone || !Cb.test(n)) &&
                        (f.support.html5Clone || !Bb.test(n)) && (e = !0, g = f.fragments[n], g && 1 !== g && (d = g)), d || (d = k.createDocumentFragment(), f.clean(a, k, d, c)), e && (f.fragments[n] = g ? d : 1), {
                            fragment: d,
                            cacheable: e
                        }
                    };
                    f.fragments = {};
                    f.each({
                        appendTo: "append",
                        prependTo: "prepend",
                        insertBefore: "before",
                        insertAfter: "after",
                        replaceAll: "replaceWith"
                    }, function (a, b) {
                        f.fn[a] = function (c) {
                            var d = [], c = f(c), e = 1 === this.length && this[0].parentNode;
                            if (e && 11 === e.nodeType && 1 === e.childNodes.length && 1 === c.length) return c[b](this[0]), this;
                            for (var e = 0, g = c.length; e <
                            g; e++) {
                                var k = (0 < e ? this.clone(!0) : this).get();
                                f(c[e])[b](k);
                                d = d.concat(k)
                            }
                            return this.pushStack(d, a, c.selector)
                        }
                    });
                    f.extend({
                        clone: function (a, b, c) {
                            var d, e, g;
                            f.support.html5Clone || !Bb.test("<" + a.nodeName) ? d = a.cloneNode(!0) : (d = t.createElement("div"), d = (Fb.appendChild(d), d.innerHTML = a.outerHTML, d.firstChild));
                            var k = d;
                            if ((!f.support.noCloneEvent || !f.support.noCloneChecked) && (1 === a.nodeType || 11 === a.nodeType) && !f.isXMLDoc(a)) {
                                ra(a, k);
                                d = F(a);
                                e = F(k);
                                for (g = 0; d[g]; ++g) e[g] && ra(d[g], e[g])
                            }
                            if (b && (B(a, k), c)) {
                                d =
                                    F(a);
                                e = F(k);
                                for (g = 0; d[g]; ++g) B(d[g], e[g])
                            }
                            return k
                        }, clean: function (a, b, c, d) {
                            b = b || t;
                            "undefined" == typeof b.createElement && (b = b.ownerDocument || b[0] && b[0].ownerDocument || t);
                            for (var e = [], g, k = 0, n; null != (n = a[k]); k++) if ("number" == typeof n && (n += ""), n) {
                                if ("string" == typeof n) if (Eb.test(n)) {
                                    n = n.replace(jb, "<$1></$2>");
                                    g = (nb.exec(n) || ["", ""])[1].toLowerCase();
                                    var m = Ba[g] || Ba._default, x = m[0], z = b.createElement("div");
                                    b === t ? Fb.appendChild(z) : q(b).appendChild(z);
                                    for (z.innerHTML = m[1] + n + m[2]; x--;) z = z.lastChild;
                                    if (!f.support.tbody) {
                                        x =
                                            Db.test(n);
                                        m = "table" === g && !x ? z.firstChild && z.firstChild.childNodes : "<table>" === m[1] && !x ? z.childNodes : [];
                                        for (g = m.length - 1; 0 <= g; --g) f.nodeName(m[g], "tbody") && !m[g].childNodes.length && m[g].parentNode.removeChild(m[g])
                                    }
                                    !f.support.leadingWhitespace && $a.test(n) && z.insertBefore(b.createTextNode($a.exec(n)[0]), z.firstChild);
                                    n = z.childNodes
                                } else n = b.createTextNode(n);
                                var r;
                                if (!f.support.appendChecked) if (n[0] && "number" == typeof(r = n.length)) for (g = 0; g < r; g++) H(n[g]); else H(n);
                                n.nodeType ? e.push(n) : e = f.merge(e, n)
                            }
                            if (c) {
                                a =
                                    function (a) {
                                        return !a.type || Sb.test(a.type)
                                    };
                                for (k = 0; e[k]; k++) d && f.nodeName(e[k], "script") && (!e[k].type || "text/javascript" === e[k].type.toLowerCase()) ? d.push(e[k].parentNode ? e[k].parentNode.removeChild(e[k]) : e[k]) : (1 === e[k].nodeType && (b = f.grep(e[k].getElementsByTagName("script"), a), e.splice.apply(e, [k + 1, 0].concat(b))), c.appendChild(e[k]))
                            }
                            return e
                        }, cleanData: function (a) {
                            for (var b, c, d = f.cache, e = f.event.special, g = f.support.deleteExpando, k = 0, n; null != (n = a[k]); k++) if (!n.nodeName || !f.noData[n.nodeName.toLowerCase()]) if (c =
                                n[f.expando]) {
                                if ((b = d[c]) && b.events) {
                                    for (var m in b.events) e[m] ? f.event.remove(n, m) : f.removeEvent(n, m, b.handle);
                                    b.handle && (b.handle.elem = null)
                                }
                                g ? delete n[f.expando] : n.removeAttribute && n.removeAttribute(f.expando);
                                delete d[c]
                            }
                        }
                    });
                    var rb = /alpha\([^)]*\)/i, kc = /opacity=([^)]*)/, lc = /([A-Z]|^ms)/g, Tb = /^-?\d+(?:px)?$/i,
                        mc = /^-?\d/, nc = /^([\-+])=([\-+.\de]+)/,
                        oc = {position: "absolute", visibility: "hidden", display: "block"}, pc = ["Left", "Right"],
                        qc = ["Top", "Bottom"], tb, Vb, Wb;
                    f.fn.css = function (a, b) {
                        return 2 === arguments.length &&
                        b === c ? this : f.access(this, a, b, !0, function (a, b, j) {
                            return j !== c ? f.style(a, b, j) : f.css(a, b)
                        })
                    };
                    f.extend({
                        cssHooks: {
                            opacity: {
                                get: function (a, b) {
                                    if (b) {
                                        var c = tb(a, "opacity", "opacity");
                                        return "" === c ? "1" : c
                                    }
                                    return a.style.opacity
                                }
                            }
                        },
                        cssNumber: {
                            fillOpacity: !0,
                            fontWeight: !0,
                            lineHeight: !0,
                            opacity: !0,
                            orphans: !0,
                            widows: !0,
                            zIndex: !0,
                            zoom: !0
                        },
                        cssProps: {"float": f.support.cssFloat ? "cssFloat" : "styleFloat"},
                        style: function (a, b, d, e) {
                            if (a && !(3 === a.nodeType || 8 === a.nodeType || !a.style)) {
                                var g, k = f.camelCase(b), n = a.style, m = f.cssHooks[k],
                                    b = f.cssProps[k] || k;
                                if (d === c) return m && "get" in m && (g = m.get(a, !1, e)) !== c ? g : n[b];
                                e = typeof d;
                                "string" === e && (g = nc.exec(d)) && (d = +(g[1] + 1) * +g[2] + parseFloat(f.css(a, b)), e = "number");
                                if (!(null == d || "number" === e && isNaN(d))) if ("number" === e && !f.cssNumber[k] && (d += "px"), !m || !("set" in m) || (d = m.set(a, d)) !== c) try {
                                    n[b] = d
                                } catch (x) {
                                }
                            }
                        },
                        css: function (a, b, d) {
                            var e, g, b = f.camelCase(b);
                            g = f.cssHooks[b];
                            b = f.cssProps[b] || b;
                            "cssFloat" === b && (b = "float");
                            if (g && "get" in g && (e = g.get(a, !0, d)) !== c) return e;
                            if (tb) return tb(a, b)
                        },
                        swap: function (a,
                                        b, c) {
                            var d = {}, f;
                            for (f in b) d[f] = a.style[f], a.style[f] = b[f];
                            c.call(a);
                            for (f in b) a.style[f] = d[f]
                        }
                    });
                    f.curCSS = f.css;
                    f.each(["height", "width"], function (a, b) {
                        f.cssHooks[b] = {
                            get: function (a, c, j) {
                                var d;
                                if (c) return 0 !== a.offsetWidth ? S(a, b, j) : (f.swap(a, oc, function () {
                                    d = S(a, b, j)
                                }), d)
                            }, set: function (a, b) {
                                if (!Tb.test(b)) return b;
                                b = parseFloat(b);
                                if (0 <= b) return b + "px"
                            }
                        }
                    });
                    f.support.opacity || (f.cssHooks.opacity = {
                        get: function (a, b) {
                            return kc.test((b && a.currentStyle ? a.currentStyle.filter : a.style.filter) || "") ? parseFloat(RegExp.$1) /
                                100 + "" : b ? "1" : ""
                        }, set: function (a, b) {
                            var c = a.style, d = a.currentStyle,
                                e = f.isNumeric(b) ? "alpha(opacity=" + 100 * b + ")" : "",
                                g = d && d.filter || c.filter || "";
                            c.zoom = 1;
                            if (1 <= b && "" === f.trim(g.replace(rb, "")) && (c.removeAttribute("filter"), d && !d.filter)) return;
                            c.filter = rb.test(g) ? g.replace(rb, e) : g + " " + e
                        }
                    });
                    f(function () {
                        f.support.reliableMarginRight || (f.cssHooks.marginRight = {
                            get: function (a, b) {
                                var c;
                                return f.swap(a, {display: "inline-block"}, function () {
                                    b ? c = tb(a, "margin-right", "marginRight") : c = a.style.marginRight
                                }), c
                            }
                        })
                    });
                    t.defaultView && t.defaultView.getComputedStyle && (Vb = function (a, b) {
                        var c, d, e;
                        return b = b.replace(lc, "-$1").toLowerCase(), (d = a.ownerDocument.defaultView) && (e = d.getComputedStyle(a, null)) && (c = e.getPropertyValue(b), "" === c && !f.contains(a.ownerDocument.documentElement, a) && (c = f.style(a, b))), c
                    });
                    t.documentElement.currentStyle && (Wb = function (a, b) {
                        var c, d, f, e = a.currentStyle && a.currentStyle[b], g = a.style;
                        return null === e && g && (f = g[b]) && (e = f), !Tb.test(e) && mc.test(e) && (c = g.left, d = a.runtimeStyle && a.runtimeStyle.left,
                        d && (a.runtimeStyle.left = a.currentStyle.left), g.left = "fontSize" === b ? "1em" : e || 0, e = g.pixelLeft + "px", g.left = c, d && (a.runtimeStyle.left = d)), "" === e ? "auto" : e
                    });
                    tb = Vb || Wb;
                    f.expr && f.expr.filters && (f.expr.filters.hidden = function (a) {
                        var b = a.offsetHeight;
                        return 0 === a.offsetWidth && 0 === b || !f.support.reliableHiddenOffsets && "none" === (a.style && a.style.display || f.css(a, "display"))
                    }, f.expr.filters.visible = function (a) {
                        return !f.expr.filters.hidden(a)
                    });
                    var rc = /%20/g, sc = /\[\]$/, Xb = /\r?\n/g, tc = /#.*$/, uc = /^(.*?):[ \t]*([^\r\n]*)\r?$/mg,
                        vc = /^(?:color|date|datetime|datetime-local|email|hidden|month|number|password|range|search|tel|text|time|url|week)$/i,
                        wc = /^(?:GET|HEAD)$/, xc = /^\/\//, Yb = /\?/,
                        yc = /<script\b[^<]*(?:(?!<\/script>)<[^<]*)*<\/script>/gi, Jc = /^(?:select|textarea)/i,
                        Oc = /\s+/, Kc = /([?&])_=[^&]*/, Yc = /^([\w\+\.\-]+:)(?:\/\/([^\/?#:]*)(?::(\d+))?)?/,
                        Zc = f.fn.load, zc = {}, $c = {}, gb, hb, ad = ["*/"] + ["*"];
                    try {
                        gb = da.href
                    } catch (dd) {
                        gb = t.createElement("a"), gb.href = "", gb = gb.href
                    }
                    hb = Yc.exec(gb.toLowerCase()) || [];
                    f.fn.extend({
                        load: function (a,
                                        b, d) {
                            if ("string" != typeof a && Zc) return Zc.apply(this, arguments);
                            if (!this.length) return this;
                            var e = a.indexOf(" ");
                            if (0 <= e) var g = a.slice(e, a.length), a = a.slice(0, e);
                            e = "GET";
                            b && (f.isFunction(b) ? (d = b, b = c) : "object" == typeof b && (b = f.param(b, f.ajaxSettings.traditional), e = "POST"));
                            var k = this;
                            return f.ajax({
                                url: a, type: e, dataType: "html", data: b, complete: function (a, b, c) {
                                    c = a.responseText;
                                    a.isResolved() && (a.done(function (a) {
                                        c = a
                                    }), k.html(g ? f("<div>").append(c.replace(yc, "")).find(g) : c));
                                    d && k.each(d, [c, b, a])
                                }
                            }), this
                        },
                        serialize: function () {
                            return f.param(this.serializeArray())
                        }, serializeArray: function () {
                            return this.map(function () {
                                return this.elements ? f.makeArray(this.elements) : this
                            }).filter(function () {
                                return this.name && !this.disabled && (this.checked || Jc.test(this.nodeName) || vc.test(this.type))
                            }).map(function (a, b) {
                                var c = f(this).val();
                                return null == c ? null : f.isArray(c) ? f.map(c, function (a) {
                                    return {name: b.name, value: a.replace(Xb, "\r\n")}
                                }) : {name: b.name, value: c.replace(Xb, "\r\n")}
                            }).get()
                        }
                    });
                    f.each("ajaxStart ajaxStop ajaxComplete ajaxError ajaxSuccess ajaxSend".split(" "),
                        function (a, b) {
                            f.fn[b] = function (a) {
                                return this.on(b, a)
                            }
                        });
                    f.each(["get", "post"], function (a, b) {
                        f[b] = function (a, j, d, e) {
                            return f.isFunction(j) && (e = e || d, d = j, j = c), f.ajax({
                                type: b,
                                url: a,
                                data: j,
                                success: d,
                                dataType: e
                            })
                        }
                    });
                    f.extend({
                        getScript: function (a, b) {
                            return f.get(a, c, b, "script")
                        }, getJSON: function (a, b, c) {
                            return f.get(a, b, c, "json")
                        }, ajaxSetup: function (a, b) {
                            return b ? W(a, f.ajaxSettings) : (b = a, a = f.ajaxSettings), W(a, b), a
                        }, ajaxSettings: {
                            url: gb,
                            isLocal: /^(?:about|app|app\-storage|.+\-extension|file|res|widget):$/.test(hb[1]),
                            global: !0,
                            type: "GET",
                            contentType: "application/x-www-form-urlencoded",
                            processData: !0,
                            async: !0,
                            accepts: {
                                xml: "application/xml, text/xml",
                                html: "text/html",
                                text: "text/plain",
                                json: "application/json, text/javascript",
                                "*": ad
                            },
                            contents: {xml: /xml/, html: /html/, json: /json/},
                            responseFields: {xml: "responseXML", text: "responseText"},
                            converters: {
                                "* text": b.String,
                                "text html": !0,
                                "text json": f.parseJSON,
                                "text xml": f.parseXML
                            },
                            flatOptions: {context: !0, url: !0}
                        }, ajaxPrefilter: Zb(zc), ajaxTransport: Zb($c), ajax: function (a,
                                                                                         b) {
                            function d(a, b, j, r) {
                                if (2 !== za) {
                                    za = 2;
                                    A && clearTimeout(A);
                                    p = c;
                                    ka = r || "";
                                    V.readyState = 0 < a ? 4 : 0;
                                    var M, ga, E, r = b;
                                    if (j) {
                                        var Z = e, P = V, ma = Z.contents, u = Z.dataTypes, ja = Z.responseFields, va,
                                            y, Ka, Kb;
                                        for (y in ja) y in j && (P[ja[y]] = j[y]);
                                        for (; "*" === u[0];) u.shift(), va === c && (va = Z.mimeType || P.getResponseHeader("content-type"));
                                        if (va) for (y in ma) if (ma[y] && ma[y].test(va)) {
                                            u.unshift(y);
                                            break
                                        }
                                        if (u[0] in j) Ka = u[0]; else {
                                            for (y in j) {
                                                if (!u[0] || Z.converters[y + " " + u[0]]) {
                                                    Ka = y;
                                                    break
                                                }
                                                Kb || (Kb = y)
                                            }
                                            Ka = Ka || Kb
                                        }
                                        j = Ka ? (Ka !== u[0] && u.unshift(Ka),
                                            j[Ka]) : void 0
                                    } else j = c;
                                    if (200 <= a && 300 > a || 304 === a) {
                                        if (e.ifModified) {
                                            if (va = V.getResponseHeader("Last-Modified")) f.lastModified[z] = va;
                                            if (va = V.getResponseHeader("Etag")) f.etag[z] = va
                                        }
                                        if (304 === a) r = "notmodified", M = !0; else try {
                                            va = e;
                                            va.dataFilter && (j = va.dataFilter(j, va.dataType));
                                            var D = va.dataTypes;
                                            y = {};
                                            var w, v, t = D.length, G, Ma = D[0], Za, Ob, Sa, ya, q;
                                            for (w = 1; w < t; w++) {
                                                if (1 === w) for (v in va.converters) "string" == typeof v && (y[v.toLowerCase()] = va.converters[v]);
                                                Za = Ma;
                                                Ma = D[w];
                                                if ("*" === Ma) Ma = Za; else if ("*" !== Za && Za !==
                                                    Ma) {
                                                    Ob = Za + " " + Ma;
                                                    Sa = y[Ob] || y["* " + Ma];
                                                    if (!Sa) for (ya in q = c, y) if (G = ya.split(" "), G[0] === Za || "*" === G[0]) if (q = y[G[1] + " " + Ma]) {
                                                        ya = y[ya];
                                                        !0 === ya ? Sa = q : !0 === q && (Sa = ya);
                                                        break
                                                    }
                                                    !Sa && !q && f.error("No conversion from " + Ob.replace(" ", " to "));
                                                    !0 !== Sa && (j = Sa ? Sa(j) : q(ya(j)))
                                                }
                                            }
                                            ga = j;
                                            r = "success";
                                            M = !0
                                        } catch (cc) {
                                            r = "parsererror", E = cc
                                        }
                                    } else if (E = r, !r || a) r = "error", 0 > a && (a = 0);
                                    V.status = a;
                                    V.statusText = "" + (b || r);
                                    M ? n.resolveWith(g, [ga, r, V]) : n.rejectWith(g, [V, r, E]);
                                    V.statusCode(x);
                                    x = c;
                                    J && k.trigger("ajax" + (M ? "Success" : "Error"),
                                        [V, e, M ? ga : E]);
                                    m.fireWith(g, [V, r]);
                                    J && (k.trigger("ajaxComplete", [V, e]), --f.active || f.event.trigger("ajaxStop"))
                                }
                            }

                            "object" == typeof a && (b = a, a = c);
                            var b = b || {}, e = f.ajaxSetup({}, b), g = e.context || e,
                                k = g !== e && (g.nodeType || g instanceof f) ? f(g) : f.event, n = f.Deferred(),
                                m = f.Callbacks("once memory"), x = e.statusCode || {}, z, r = {}, M = {}, ka, Z, p, A,
                                P, za = 0, J, ma, V = {
                                    readyState: 0, setRequestHeader: function (a, b) {
                                        if (!za) {
                                            var c = a.toLowerCase(), a = M[c] = M[c] || a;
                                            r[a] = b
                                        }
                                        return this
                                    }, getAllResponseHeaders: function () {
                                        return 2 === za ? ka : null
                                    },
                                    getResponseHeader: function (a) {
                                        var b;
                                        if (2 === za) {
                                            if (!Z) for (Z = {}; b = uc.exec(ka);) Z[b[1].toLowerCase()] = b[2];
                                            b = Z[a.toLowerCase()]
                                        }
                                        return b === c ? null : b
                                    }, overrideMimeType: function (a) {
                                        return za || (e.mimeType = a), this
                                    }, abort: function (a) {
                                        return a = a || "abort", p && p.abort(a), d(0, a), this
                                    }
                                };
                            n.promise(V);
                            V.success = V.done;
                            V.error = V.fail;
                            V.complete = m.add;
                            V.statusCode = function (a) {
                                if (a) {
                                    var b;
                                    if (2 > za) for (b in a) x[b] = [x[b], a[b]]; else b = a[V.status], V.then(b, b)
                                }
                                return this
                            };
                            e.url = ((a || e.url) + "").replace(tc, "").replace(xc, hb[1] +
                                "//");
                            e.dataTypes = f.trim(e.dataType || "*").toLowerCase().split(Oc);
                            null == e.crossDomain && (P = Yc.exec(e.url.toLowerCase()), e.crossDomain = !(!P || P[1] == hb[1] && P[2] == hb[2] && (P[3] || ("http:" === P[1] ? 80 : 443)) == (hb[3] || ("http:" === hb[1] ? 80 : 443))));
                            e.data && e.processData && "string" != typeof e.data && (e.data = f.param(e.data, e.traditional));
                            Q(zc, e, b, V);
                            if (2 === za) return !1;
                            J = e.global;
                            e.type = e.type.toUpperCase();
                            e.hasContent = !wc.test(e.type);
                            J && 0 === f.active++ && f.event.trigger("ajaxStart");
                            if (!e.hasContent && (e.data && (e.url +=
                                (Yb.test(e.url) ? "&" : "?") + e.data, delete e.data), z = e.url, !1 === e.cache)) {
                                P = f.now();
                                var u = e.url.replace(Kc, "$1_=" + P);
                                e.url = u + (u === e.url ? (Yb.test(e.url) ? "&" : "?") + "_=" + P : "")
                            }
                            (e.data && e.hasContent && !1 !== e.contentType || b.contentType) && V.setRequestHeader("Content-Type", e.contentType);
                            e.ifModified && (z = z || e.url, f.lastModified[z] && V.setRequestHeader("If-Modified-Since", f.lastModified[z]), f.etag[z] && V.setRequestHeader("If-None-Match", f.etag[z]));
                            V.setRequestHeader("Accept", e.dataTypes[0] && e.accepts[e.dataTypes[0]] ?
                                e.accepts[e.dataTypes[0]] + ("*" !== e.dataTypes[0] ? ", " + ad + "; q=0.01" : "") : e.accepts["*"]);
                            for (ma in e.headers) V.setRequestHeader(ma, e.headers[ma]);
                            if (!e.beforeSend || !1 !== e.beforeSend.call(g, V, e) && 2 !== za) {
                                for (ma in{success: 1, error: 1, complete: 1}) V[ma](e[ma]);
                                if (p = Q($c, e, b, V)) {
                                    V.readyState = 1;
                                    J && k.trigger("ajaxSend", [V, e]);
                                    e.async && 0 < e.timeout && (A = setTimeout(function () {
                                        V.abort("timeout")
                                    }, e.timeout));
                                    try {
                                        za = 1, p.send(r, d)
                                    } catch (ja) {
                                        if (2 <= za) throw ja;
                                        d(-1, ja)
                                    }
                                } else d(-1, "No Transport");
                                return V
                            }
                            return V.abort(),
                                !1
                        }, param: function (a, b) {
                            var d = [], e = function (a, b) {
                                b = f.isFunction(b) ? b() : b;
                                d[d.length] = encodeURIComponent(a) + "=" + encodeURIComponent(b)
                            };
                            b === c && (b = f.ajaxSettings.traditional);
                            if (f.isArray(a) || a.jquery && !f.isPlainObject(a)) f.each(a, function () {
                                e(this.name, this.value)
                            }); else for (var g in a) T(g, a[g], b, e);
                            return d.join("&").replace(rc, "+")
                        }
                    });
                    f.extend({active: 0, lastModified: {}, etag: {}});
                    var pd = f.now(), ic = /(\=)\?(&|$)|\?\?/i;
                    f.ajaxSetup({
                        jsonp: "callback", jsonpCallback: function () {
                            return f.expando + "_" + pd++
                        }
                    });
                    f.ajaxPrefilter("json jsonp", function (a, c, d) {
                        c = "application/x-www-form-urlencoded" === a.contentType && "string" == typeof a.data;
                        if ("jsonp" === a.dataTypes[0] || !1 !== a.jsonp && (ic.test(a.url) || c && ic.test(a.data))) {
                            var e,
                                g = a.jsonpCallback = f.isFunction(a.jsonpCallback) ? a.jsonpCallback() : a.jsonpCallback,
                                k = b[g], n = a.url, m = a.data, x = "$1" + g + "$2";
                            return !1 !== a.jsonp && (n = n.replace(ic, x), a.url === n && (c && (m = m.replace(ic, x)), a.data === m && (n += (/\?/.test(n) ? "&" : "?") + a.jsonp + "=" + g))), a.url = n, a.data = m, b[g] = function (a) {
                                e = [a]
                            },
                                d.always(function () {
                                    b[g] = k;
                                    e && f.isFunction(k) && b[g](e[0])
                                }), a.converters["script json"] = function () {
                                return e || f.error(g + " was not called"), e[0]
                            }, a.dataTypes[0] = "json", "script"
                        }
                    });
                    f.ajaxSetup({
                        accepts: {script: "text/javascript, application/javascript, application/ecmascript, application/x-ecmascript"},
                        contents: {script: /javascript|ecmascript/},
                        converters: {
                            "text script": function (a) {
                                return f.globalEval(a), a
                            }
                        }
                    });
                    f.ajaxPrefilter("script", function (a) {
                        a.cache === c && (a.cache = !1);
                        a.crossDomain && (a.type = "GET",
                            a.global = !1)
                    });
                    f.ajaxTransport("script", function (a) {
                        if (a.crossDomain) {
                            var b, d = t.head || t.getElementsByTagName("head")[0] || t.documentElement;
                            return {
                                send: function (e, f) {
                                    b = t.createElement("script");
                                    b.async = "async";
                                    a.scriptCharset && (b.charset = a.scriptCharset);
                                    b.src = a.url;
                                    b.onload = b.onreadystatechange = function (a, j) {
                                        if (j || !b.readyState || /loaded|complete/.test(b.readyState)) b.onload = b.onreadystatechange = null, d && b.parentNode && d.removeChild(b), b = c, j || f(200, "success")
                                    };
                                    d.insertBefore(b, d.firstChild)
                                }, abort: function () {
                                    b &&
                                    b.onload(0, 1)
                                }
                            }
                        }
                    });
                    var Gc = b.ActiveXObject ? function () {
                        for (var a in zb) zb[a](0, 1)
                    } : !1, qd = 0, zb;
                    f.ajaxSettings.xhr = b.ActiveXObject ? function () {
                        var a;
                        if (!(a = !this.isLocal && ba())) a:{
                            try {
                                a = new b.ActiveXObject("Microsoft.XMLHTTP");
                                break a
                            } catch (c) {
                            }
                            a = void 0
                        }
                        return a
                    } : ba;
                    var Hc = f.ajaxSettings.xhr();
                    f.extend(f.support, {ajax: !!Hc, cors: !!Hc && "withCredentials" in Hc});
                    f.support.ajax && f.ajaxTransport(function (a) {
                        if (!a.crossDomain || f.support.cors) {
                            var d;
                            return {
                                send: function (e, g) {
                                    var k = a.xhr(), n, m;
                                    a.username ? k.open(a.type,
                                        a.url, a.async, a.username, a.password) : k.open(a.type, a.url, a.async);
                                    if (a.xhrFields) for (m in a.xhrFields) k[m] = a.xhrFields[m];
                                    a.mimeType && k.overrideMimeType && k.overrideMimeType(a.mimeType);
                                    !a.crossDomain && !e["X-Requested-With"] && (e["X-Requested-With"] = "XMLHttpRequest");
                                    try {
                                        for (m in e) k.setRequestHeader(m, e[m])
                                    } catch (x) {
                                    }
                                    k.send(a.hasContent && a.data || null);
                                    d = function (b, e) {
                                        var m, x, z, r, M;
                                        try {
                                            if (d && (e || 4 === k.readyState)) if (d = c, n && (k.onreadystatechange = f.noop, Gc && delete zb[n]), e) 4 !== k.readyState && k.abort();
                                            else {
                                                m = k.status;
                                                z = k.getAllResponseHeaders();
                                                r = {};
                                                (M = k.responseXML) && M.documentElement && (r.xml = M);
                                                r.text = k.responseText;
                                                try {
                                                    x = k.statusText
                                                } catch (ka) {
                                                    x = ""
                                                }
                                                !m && a.isLocal && !a.crossDomain ? m = r.text ? 200 : 404 : 1223 === m && (m = 204)
                                            }
                                        } catch (Z) {
                                            e || g(-1, Z)
                                        }
                                        r && g(m, x, r, z)
                                    };
                                    !a.async || 4 === k.readyState ? d() : (n = ++qd, Gc && (zb || (zb = {}, f(b).unload(Gc)), zb[n] = d), k.onreadystatechange = d)
                                }, abort: function () {
                                    d && d(0, 1)
                                }
                            }
                        }
                    });
                    var Ac = {}, Ra, ub, rd = /^(?:toggle|show|hide)$/, sd = /^([+\-]=)?([\d+.\-]+)([a-z%]*)$/i, jc,
                        Pc = [["height", "marginTop",
                            "marginBottom", "paddingTop", "paddingBottom"], ["width", "marginLeft", "marginRight", "paddingLeft", "paddingRight"], ["opacity"]],
                        Jb;
                    f.fn.extend({
                        show: function (a, b, c) {
                            var d;
                            if (a || 0 === a) return this.animate(Y("show", 3), a, b, c);
                            b = 0;
                            for (c = this.length; b < c; b++) a = this[b], a.style && (d = a.style.display, !f._data(a, "olddisplay") && "none" === d && (d = a.style.display = ""), "" === d && "none" === f.css(a, "display") && f._data(a, "olddisplay", fa(a.nodeName)));
                            for (b = 0; b < c; b++) if (a = this[b], a.style && (d = a.style.display, "" === d || "none" === d)) a.style.display =
                                f._data(a, "olddisplay") || "";
                            return this
                        }, hide: function (a, b, c) {
                            if (a || 0 === a) return this.animate(Y("hide", 3), a, b, c);
                            for (var d, b = 0, c = this.length; b < c; b++) a = this[b], a.style && (d = f.css(a, "display"), "none" !== d && !f._data(a, "olddisplay") && f._data(a, "olddisplay", d));
                            for (b = 0; b < c; b++) this[b].style && (this[b].style.display = "none");
                            return this
                        }, _toggle: f.fn.toggle, toggle: function (a, b, c) {
                            var d = "boolean" == typeof a;
                            return f.isFunction(a) && f.isFunction(b) ? this._toggle.apply(this, arguments) : null == a || d ? this.each(function () {
                                var b =
                                    d ? a : f(this).is(":hidden");
                                f(this)[b ? "show" : "hide"]()
                            }) : this.animate(Y("toggle", 3), a, b, c), this
                        }, fadeTo: function (a, b, c, d) {
                            return this.filter(":hidden").css("opacity", 0).show().end().animate({opacity: b}, a, c, d)
                        }, animate: function (a, b, c, d) {
                            function e() {
                                !1 === g.queue && f._mark(this);
                                var b = f.extend({}, g), c = 1 === this.nodeType, d = c && f(this).is(":hidden"), k, n,
                                    m, x, z, r, M, ka;
                                b.animatedProperties = {};
                                for (m in a) {
                                    k = f.camelCase(m);
                                    m !== k && (a[k] = a[m], delete a[m]);
                                    n = a[k];
                                    f.isArray(n) ? (b.animatedProperties[k] = n[1], n = a[k] =
                                        n[0]) : b.animatedProperties[k] = b.specialEasing && b.specialEasing[k] || b.easing || "swing";
                                    if ("hide" === n && d || "show" === n && !d) return b.complete.call(this);
                                    c && ("height" === k || "width" === k) && (b.overflow = [this.style.overflow, this.style.overflowX, this.style.overflowY], "inline" === f.css(this, "display") && "none" === f.css(this, "float") && (!f.support.inlineBlockNeedsLayout || "inline" === fa(this.nodeName) ? this.style.display = "inline-block" : this.style.zoom = 1))
                                }
                                null != b.overflow && (this.style.overflow = "hidden");
                                for (m in a) c = new f.fx(this,
                                    b, m), n = a[m], rd.test(n) ? (ka = f._data(this, "toggle" + m) || ("toggle" === n ? d ? "show" : "hide" : 0), ka ? (f._data(this, "toggle" + m, "show" === ka ? "hide" : "show"), c[ka]()) : c[n]()) : (x = sd.exec(n), z = c.cur(), x ? (r = parseFloat(x[2]), M = x[3] || (f.cssNumber[m] ? "" : "px"), "px" !== M && (f.style(this, m, (r || 1) + M), z *= (r || 1) / c.cur(), f.style(this, m, z + M)), x[1] && (r = ("-=" === x[1] ? -1 : 1) * r + z), c.custom(z, r, M)) : c.custom(z, n, ""));
                                return !0
                            }

                            var g = f.speed(b, c, d);
                            return f.isEmptyObject(a) ? this.each(g.complete, [!1]) : (a = f.extend({}, a), !1 === g.queue ? this.each(e) :
                                this.queue(g.queue, e))
                        }, stop: function (a, b, d) {
                            return "string" != typeof a && (d = b, b = a, a = c), b && !1 !== a && this.queue(a || "fx", []), this.each(function () {
                                var b, c = !1, e = f.timers, g = f._data(this);
                                d || f._unmark(!0, this);
                                if (null == a) for (b in g) {
                                    if (g[b] && g[b].stop && b.indexOf(".run") === b.length - 4) {
                                        var k = g[b];
                                        f.removeData(this, b, !0);
                                        k.stop(d)
                                    }
                                } else if (g[b = a + ".run"] && g[b].stop) g = g[b], f.removeData(this, b, !0), g.stop(d);
                                for (b = e.length; b--;) e[b].elem === this && (null == a || e[b].queue === a) && (d ? e[b](!0) : e[b].saveState(), c = !0, e.splice(b,
                                    1));
                                (!d || !c) && f.dequeue(this, a)
                            })
                        }
                    });
                    f.each({
                        slideDown: Y("show", 1),
                        slideUp: Y("hide", 1),
                        slideToggle: Y("toggle", 1),
                        fadeIn: {opacity: "show"},
                        fadeOut: {opacity: "hide"},
                        fadeToggle: {opacity: "toggle"}
                    }, function (a, b) {
                        f.fn[a] = function (a, c, d) {
                            return this.animate(b, a, c, d)
                        }
                    });
                    f.extend({
                        speed: function (a, b, c) {
                            var d = a && "object" == typeof a ? f.extend({}, a) : {
                                complete: c || !c && b || f.isFunction(a) && a,
                                duration: a,
                                easing: c && b || b && !f.isFunction(b) && b
                            };
                            d.duration = f.fx.off ? 0 : "number" == typeof d.duration ? d.duration : d.duration in f.fx.speeds ?
                                f.fx.speeds[d.duration] : f.fx.speeds._default;
                            if (null == d.queue || !0 === d.queue) d.queue = "fx";
                            return d.old = d.complete, d.complete = function (a) {
                                f.isFunction(d.old) && d.old.call(this);
                                d.queue ? f.dequeue(this, d.queue) : !1 !== a && f._unmark(this)
                            }, d
                        }, easing: {
                            linear: function (a, b, c, d) {
                                return c + d * a
                            }, swing: function (a, b, c, d) {
                                return (-Math.cos(a * Math.PI) / 2 + 0.5) * d + c
                            }
                        }, timers: [], fx: function (a, b, c) {
                            this.options = b;
                            this.elem = a;
                            this.prop = c;
                            b.orig = b.orig || {}
                        }
                    });
                    f.fx.prototype = {
                        update: function () {
                            this.options.step && this.options.step.call(this.elem,
                                this.now, this);
                            (f.fx.step[this.prop] || f.fx.step._default)(this)
                        }, cur: function () {
                            if (null == this.elem[this.prop] || this.elem.style && null != this.elem.style[this.prop]) {
                                var a, b = f.css(this.elem, this.prop);
                                return isNaN(a = parseFloat(b)) ? !b || "auto" === b ? 0 : b : a
                            }
                            return this.elem[this.prop]
                        }, custom: function (a, b, d) {
                            function e(a) {
                                return g.step(a)
                            }

                            var g = this, k = f.fx;
                            this.startTime = Jb || (setTimeout(aa, 0), Jb = f.now());
                            this.end = b;
                            this.now = this.start = a;
                            this.pos = this.state = 0;
                            this.unit = d || this.unit || (f.cssNumber[this.prop] ?
                                "" : "px");
                            e.queue = this.options.queue;
                            e.elem = this.elem;
                            e.saveState = function () {
                                g.options.hide && f._data(g.elem, "fxshow" + g.prop) === c && f._data(g.elem, "fxshow" + g.prop, g.start)
                            };
                            e() && f.timers.push(e) && !jc && (jc = setInterval(k.tick, k.interval))
                        }, show: function () {
                            var a = f._data(this.elem, "fxshow" + this.prop);
                            this.options.orig[this.prop] = a || f.style(this.elem, this.prop);
                            this.options.show = !0;
                            a !== c ? this.custom(this.cur(), a) : this.custom("width" === this.prop || "height" === this.prop ? 1 : 0, this.cur());
                            f(this.elem).show()
                        }, hide: function () {
                            this.options.orig[this.prop] =
                                f._data(this.elem, "fxshow" + this.prop) || f.style(this.elem, this.prop);
                            this.options.hide = !0;
                            this.custom(this.cur(), 0)
                        }, step: function (a) {
                            var b, c, d = Jb || (setTimeout(aa, 0), Jb = f.now()), e = !0, g = this.elem,
                                k = this.options;
                            if (a || d >= k.duration + this.startTime) {
                                this.now = this.end;
                                this.pos = this.state = 1;
                                this.update();
                                k.animatedProperties[this.prop] = !0;
                                for (b in k.animatedProperties) !0 !== k.animatedProperties[b] && (e = !1);
                                if (e) {
                                    null != k.overflow && !f.support.shrinkWrapBlocks && f.each(["", "X", "Y"], function (a, b) {
                                        g.style["overflow" +
                                        b] = k.overflow[a]
                                    });
                                    k.hide && f(g).hide();
                                    if (k.hide || k.show) for (b in k.animatedProperties) f.style(g, b, k.orig[b]), f.removeData(g, "fxshow" + b, !0), f.removeData(g, "toggle" + b, !0);
                                    (a = k.complete) && (k.complete = !1, a.call(g))
                                }
                                return !1
                            }
                            return Infinity == k.duration ? this.now = d : (c = d - this.startTime, this.state = c / k.duration, this.pos = f.easing[k.animatedProperties[this.prop]](this.state, c, 0, 1, k.duration), this.now = this.start + (this.end - this.start) * this.pos), this.update(), !0
                        }
                    };
                    f.extend(f.fx, {
                        tick: function () {
                            for (var a, b = f.timers,
                                     c = 0; c < b.length; c++) a = b[c], !a() && b[c] === a && b.splice(c--, 1);
                            b.length || f.fx.stop()
                        }, interval: 13, stop: function () {
                            clearInterval(jc);
                            jc = null
                        }, speeds: {slow: 600, fast: 200, _default: 400}, step: {
                            opacity: function (a) {
                                f.style(a.elem, "opacity", a.now)
                            }, _default: function (a) {
                                a.elem.style && null != a.elem.style[a.prop] ? a.elem.style[a.prop] = a.now + a.unit : a.elem[a.prop] = a.now
                            }
                        }
                    });
                    f.each(["width", "height"], function (a, b) {
                        f.fx.step[b] = function (a) {
                            f.style(a.elem, b, Math.max(0, a.now) + a.unit)
                        }
                    });
                    f.expr && f.expr.filters && (f.expr.filters.animated =
                        function (a) {
                            return f.grep(f.timers, function (b) {
                                return a === b.elem
                            }).length
                        });
                    var td = /^t(?:able|d|h)$/i, bd = /^(?:body|html)$/i;
                    "getBoundingClientRect" in t.documentElement ? f.fn.offset = function (a) {
                        var b = this[0], c;
                        if (a) return this.each(function (b) {
                            f.offset.setOffset(this, a, b)
                        });
                        if (!b || !b.ownerDocument) return null;
                        if (b === b.ownerDocument.body) return f.offset.bodyOffset(b);
                        try {
                            c = b.getBoundingClientRect()
                        } catch (d) {
                        }
                        var e = b.ownerDocument, g = e.documentElement;
                        if (!c || !f.contains(g, b)) return c ? {top: c.top, left: c.left} :
                            {top: 0, left: 0};
                        b = e.body;
                        e = ha(e);
                        return {
                            top: c.top + (e.pageYOffset || f.support.boxModel && g.scrollTop || b.scrollTop) - (g.clientTop || b.clientTop || 0),
                            left: c.left + (e.pageXOffset || f.support.boxModel && g.scrollLeft || b.scrollLeft) - (g.clientLeft || b.clientLeft || 0)
                        }
                    } : f.fn.offset = function (a) {
                        var b = this[0];
                        if (a) return this.each(function (b) {
                            f.offset.setOffset(this, a, b)
                        });
                        if (!b || !b.ownerDocument) return null;
                        if (b === b.ownerDocument.body) return f.offset.bodyOffset(b);
                        var c, d = b.offsetParent, e = b.ownerDocument, g = e.documentElement,
                            k = e.body;
                        c = (e = e.defaultView) ? e.getComputedStyle(b, null) : b.currentStyle;
                        for (var n = b.offsetTop, m = b.offsetLeft; (b = b.parentNode) && (b !== k && b !== g) && !(f.support.fixedPosition && "fixed" === c.position);) c = e ? e.getComputedStyle(b, null) : b.currentStyle, n -= b.scrollTop, m -= b.scrollLeft, b === d && (n += b.offsetTop, m += b.offsetLeft, f.support.doesNotAddBorder && (!f.support.doesAddBorderForTableAndCells || !td.test(b.nodeName)) && (n += parseFloat(c.borderTopWidth) || 0, m += parseFloat(c.borderLeftWidth) || 0), d = b.offsetParent), f.support.subtractsBorderForOverflowNotVisible &&
                        "visible" !== c.overflow && (n += parseFloat(c.borderTopWidth) || 0, m += parseFloat(c.borderLeftWidth) || 0);
                        if ("relative" === c.position || "static" === c.position) n += k.offsetTop, m += k.offsetLeft;
                        return f.support.fixedPosition && "fixed" === c.position && (n += Math.max(g.scrollTop, k.scrollTop), m += Math.max(g.scrollLeft, k.scrollLeft)), {
                            top: n,
                            left: m
                        }
                    };
                    f.offset = {
                        bodyOffset: function (a) {
                            var b = a.offsetTop, c = a.offsetLeft;
                            return f.support.doesNotIncludeMarginInBodyOffset && (b += parseFloat(f.css(a, "marginTop")) || 0, c += parseFloat(f.css(a,
                                "marginLeft")) || 0), {top: b, left: c}
                        }, setOffset: function (a, b, c) {
                            var d = f.css(a, "position");
                            "static" === d && (a.style.position = "relative");
                            var e = f(a), g = e.offset(), k = f.css(a, "top"), n = f.css(a, "left"), m = {}, x = {}, z,
                                r;
                            ("absolute" === d || "fixed" === d) && -1 < f.inArray("auto", [k, n]) ? (x = e.position(), z = x.top, r = x.left) : (z = parseFloat(k) || 0, r = parseFloat(n) || 0);
                            f.isFunction(b) && (b = b.call(a, c, g));
                            null != b.top && (m.top = b.top - g.top + z);
                            null != b.left && (m.left = b.left - g.left + r);
                            "using" in b ? b.using.call(a, m) : e.css(m)
                        }
                    };
                    f.fn.extend({
                        position: function () {
                            if (!this[0]) return null;
                            var a = this[0], b = this.offsetParent(), c = this.offset(),
                                d = bd.test(b[0].nodeName) ? {top: 0, left: 0} : b.offset();
                            return c.top -= parseFloat(f.css(a, "marginTop")) || 0, c.left -= parseFloat(f.css(a, "marginLeft")) || 0, d.top += parseFloat(f.css(b[0], "borderTopWidth")) || 0, d.left += parseFloat(f.css(b[0], "borderLeftWidth")) || 0, {
                                top: c.top - d.top,
                                left: c.left - d.left
                            }
                        }, offsetParent: function () {
                            return this.map(function () {
                                for (var a = this.offsetParent || t.body; a && !bd.test(a.nodeName) && "static" === f.css(a, "position");) a = a.offsetParent;
                                return a
                            })
                        }
                    });
                    f.each(["Left", "Top"], function (a, b) {
                        var d = "scroll" + b;
                        f.fn[d] = function (b) {
                            var e, g;
                            return b === c ? (e = this[0], e ? (g = ha(e), g ? "pageXOffset" in g ? g[a ? "pageYOffset" : "pageXOffset"] : f.support.boxModel && g.document.documentElement[d] || g.document.body[d] : e[d]) : null) : this.each(function () {
                                (g = ha(this)) ? g.scrollTo(a ? f(g).scrollLeft() : b, a ? b : f(g).scrollTop()) : this[d] = b
                            })
                        }
                    });
                    f.each(["Height", "Width"], function (a, b) {
                        var d = b.toLowerCase();
                        f.fn["inner" + b] = function () {
                            var a = this[0];
                            return a ? a.style ? parseFloat(f.css(a,
                                d, "padding")) : this[d]() : null
                        };
                        f.fn["outer" + b] = function (a) {
                            var b = this[0];
                            return b ? b.style ? parseFloat(f.css(b, d, a ? "margin" : "border")) : this[d]() : null
                        };
                        f.fn[d] = function (a) {
                            var e = this[0];
                            if (!e) return null == a ? null : this;
                            if (f.isFunction(a)) return this.each(function (b) {
                                var c = f(this);
                                c[d](a.call(this, b, c[d]()))
                            });
                            if (f.isWindow(e)) {
                                var j = e.document.documentElement["client" + b], g = e.document.body;
                                return "CSS1Compat" === e.document.compatMode && j || g && g["client" + b] || j
                            }
                            return 9 === e.nodeType ? Math.max(e.documentElement["client" +
                            b], e.body["scroll" + b], e.documentElement["scroll" + b], e.body["offset" + b], e.documentElement["offset" + b]) : a === c ? (e = f.css(e, d), j = parseFloat(e), f.isNumeric(j) ? j : e) : this.css(d, "string" == typeof a ? a : a + "px")
                        }
                    });
                    a.jQuery = a.$ = f;
                    "function" == typeof define && define.amd && define.amd.jQuery && define("jquery", [], function () {
                        return f
                    })
                }
                g = Ua = xa.jQuery
            } else g = Ua = window.jQuery;
            if (!g.fn.registerMutationObserver) {
                var ib = Ua, ud = window;
                ib.fn.extend({
                    registerMutationObserver: function (a, b) {
                        "undefined" !== typeof Rb && Rb.register(this.selector,
                            a, b)
                    }
                });
                var cd = window.MutationObserver || window.WebKitMutationObserver || window.MozMutationObserver;
                if (cd) {
                    var Rb = {
                        observer: null,
                        rootNode: ud.document,
                        observerOptions: {
                            subtree: !0,
                            attributes: !0,
                            childList: !0,
                            characterData: !0,
                            characterDataOldValue: !0,
                            attributeOldValue: !0,
                            attributeFilter: []
                        },
                        mutationHandlers: {attributes: {style: {}, "class": {}}, removedNodes: {}, characterData: {}},
                        init: function () {
                            function a(b, c, d) {
                                c && c.forEach(function (a) {
                                    a.apply(b, d)
                                })
                            }

                            var b = this;
                            this.observer = new cd(function (c) {
                                b.disconnect();
                                c.forEach(function (c) {
                                    var d = c.target, e;
                                    if ("childList" == c.type) {
                                        if ((d = c.removedNodes) && d.length) for (var f = 0; f < d.length; f++) if (e = b.getMutationHandlers("removedNodes", d[f], c)) {
                                            a(d[f], e, ["removedNodes"]);
                                            break
                                        }
                                    } else "attributes" == c.type ? (e = b.getMutationHandlers("attributes", d, c), a(d, e, ["attributes", c.oldValue, c.attributeName])) : "characterData" == c.type && (e = b.getMutationHandlers("characterData", d.parentNode, c), a(d.parentNode, e, ["characterData", c.oldValue]))
                                });
                                b.reconnect()
                            });
                            this.reconnect()
                        },
                        reconnect: function () {
                            this.observer.observe(this.rootNode,
                                this.observerOptions)
                        },
                        disconnect: function () {
                            this.observer.disconnect()
                        },
                        getMutationHandlers: function (a, b, c) {
                            function d(a) {
                                for (var e in a) if (1 == b.nodeType && ib(b).is(e) || ib(c.target).is(e) || a[e].subtree && 0 < ib(c.target).parents(e).length) return a[e].handlers;
                                return null
                            }

                            var e = this.mutationHandlers[a];
                            if (e) if ("attributes" == a) {
                                if (c && e[c.attributeName]) return d(e[c.attributeName])
                            } else return d(e);
                            return null
                        },
                        register: function (a, b, c) {
                            var d = this, e = this.mutationHandlers, f, g;
                            for (g in b) f = b[g], g in e && f &&
                            ("attributes" === g ? f.forEach(function (f) {
                                e[g][f][a] || (e[g][f][a] = {subtree: !0 === b.subtree, handlers: []});
                                e[g][f][a].handlers.push(c);
                                var k = d.observerOptions.attributeFilter;
                                0 > k.indexOf(f) && k.push(f)
                            }) : (e[g][a] || (e[g][a] = {
                                subtree: !0 === b.subtree,
                                handlers: []
                            }), e[g][a].handlers.push(c)))
                        }
                    };
                    Rb.init();
                    var Ic = {};
                    "show hide addClass removeClass toggleClass css width height remove html text val attr removeAttr".split(" ").forEach(function (a) {
                        Ic["original_" + a] = ib.fn[a];
                        Ic[a] = function () {
                            var b = arguments;
                            Rb.disconnect();
                            b = ib.fn["original_" + a].apply(this, b);
                            Rb.reconnect();
                            return b
                        }
                    });
                    ib.fn.extend(Ic)
                }
            }
            return g
        };
        xa.loadFlot = function () {
            if (!window.$ || window.jQuery) var a = Ua = xa.loadJQuery();
            if (!document.createElement("canvas").getContext) {
                var b = function () {
                        return this.context_ || (this.context_ = new L(this))
                    }, c = function (a, b, c) {
                        var d = X.call(arguments, 2);
                        return function () {
                            return a.apply(b, d.concat(X.call(arguments)))
                        }
                    }, d = function (a) {
                        return String(a).replace(/&/g, "&amp;").replace(/"/g, "&quot;")
                    }, e = function (a) {
                        a.namespaces.g_vml_ ||
                        a.namespaces.add("g_vml_", "urn:schemas-microsoft-com:vml", "#default#VML");
                        a.namespaces.g_o_ || a.namespaces.add("g_o_", "urn:schemas-microsoft-com:office:office", "#default#VML");
                        a.styleSheets.ex_canvas_ || (a = a.createStyleSheet(), a.owningElement.id = "ex_canvas_", a.cssText = "canvas{display:inline-block;overflow:hidden;text-align:left;width:300px;height:150px}")
                    }, g = function (a) {
                        var b = a.srcElement;
                        switch (a.propertyName) {
                            case "width":
                                b.getContext().clearRect();
                                b.style.width = b.attributes.width.nodeValue + "px";
                                b.firstChild.style.width = b.clientWidth + "px";
                                break;
                            case "height":
                                b.getContext().clearRect(), b.style.height = b.attributes.height.nodeValue + "px", b.firstChild.style.height = b.clientHeight + "px"
                        }
                    }, p = function (a) {
                        a = a.srcElement;
                        a.firstChild && (a.firstChild.style.width = a.clientWidth + "px", a.firstChild.style.height = a.clientHeight + "px")
                    }, y = function () {
                        return [[1, 0, 0], [0, 1, 0], [0, 0, 1]]
                    }, w = function (a, b) {
                        for (var c = y(), d = 0; 3 > d; d++) for (var e = 0; 3 > e; e++) {
                            for (var f = 0, g = 0; 3 > g; g++) f += a[d][g] * b[g][e];
                            c[d][e] = f
                        }
                        return c
                    }, q = function (a,
                                     b) {
                        b.fillStyle = a.fillStyle;
                        b.lineCap = a.lineCap;
                        b.lineJoin = a.lineJoin;
                        b.lineWidth = a.lineWidth;
                        b.miterLimit = a.miterLimit;
                        b.shadowBlur = a.shadowBlur;
                        b.shadowColor = a.shadowColor;
                        b.shadowOffsetX = a.shadowOffsetX;
                        b.shadowOffsetY = a.shadowOffsetY;
                        b.strokeStyle = a.strokeStyle;
                        b.globalAlpha = a.globalAlpha;
                        b.font = a.font;
                        b.textAlign = a.textAlign;
                        b.textBaseline = a.textBaseline;
                        b.arcScaleX_ = a.arcScaleX_;
                        b.arcScaleY_ = a.arcScaleY_;
                        b.lineScale_ = a.lineScale_
                    }, B = function (a) {
                        var b = a.indexOf("(", 3), c = a.indexOf(")", b + 1), b = a.substring(b +
                            1, c).split(",");
                        4 == b.length && "a" == a.substr(3, 1) ? alpha = Number(b[3]) : b[3] = 1;
                        return b
                    }, ra = function (a, b, c) {
                        return Math.min(c, Math.max(b, a))
                    }, F = function (a, b, c) {
                        0 > c && c++;
                        1 < c && c--;
                        return 1 > 6 * c ? a + 6 * (b - a) * c : 1 > 2 * c ? b : 2 > 3 * c ? a + 6 * (b - a) * (2 / 3 - c) : a
                    }, C = function (a) {
                        var b = 1, a = String(a);
                        if ("#" != a.charAt(0)) if (/^rgb/.test(a)) {
                            for (var b = B(a), a = "#", c, d = 0; 3 > d; d++) c = -1 != b[d].indexOf("%") ? Math.floor(255 * (parseFloat(b[d]) / 100)) : Number(b[d]), a += ca[ra(c, 0, 255)];
                            b = b[3]
                        } else if (/^hsl/.test(a)) {
                            a = b = B(a);
                            h = parseFloat(a[0]) / 360 % 360;
                            0 > h && h++;
                            s = ra(parseFloat(a[1]) / 100, 0, 1);
                            l = ra(parseFloat(a[2]) / 100, 0, 1);
                            if (0 == s) a = c = d = l; else {
                                var d = 0.5 > l ? l * (1 + s) : l + s - l * s, e = 2 * l - d, a = F(e, d, h + 1 / 3);
                                c = F(e, d, h);
                                d = F(e, d, h - 1 / 3)
                            }
                            a = "#" + ca[Math.floor(255 * a)] + ca[Math.floor(255 * c)] + ca[Math.floor(255 * d)];
                            b = b[3]
                        } else a = ta[a] || a;
                        return {color: a, alpha: b}
                    }, H = function (a) {
                        switch (a) {
                            case "butt":
                                return "flat";
                            case "round":
                                return "round";
                            default:
                                return "square"
                        }
                    }, L = function (a) {
                        this.m_ = y();
                        this.mStack_ = [];
                        this.aStack_ = [];
                        this.currentPath_ = [];
                        this.fillStyle = this.strokeStyle =
                            "#000";
                        this.lineWidth = 1;
                        this.lineJoin = "miter";
                        this.lineCap = "butt";
                        this.miterLimit = 1 * R;
                        this.globalAlpha = 1;
                        this.font = "10px sans-serif";
                        this.textAlign = "left";
                        this.textBaseline = "alphabetic";
                        this.canvas = a;
                        var b = a.ownerDocument.createElement("div");
                        b.style.width = a.clientWidth + "px";
                        b.style.height = a.clientHeight + "px";
                        b.style.overflow = "hidden";
                        b.style.position = "absolute";
                        a.appendChild(b);
                        this.element_ = b;
                        this.lineScale_ = this.arcScaleY_ = this.arcScaleX_ = 1
                    }, U = function (a, b, c, d) {
                        a.currentPath_.push({
                            type: "bezierCurveTo",
                            cp1x: b.x, cp1y: b.y, cp2x: c.x, cp2y: c.y, x: d.x, y: d.y
                        });
                        a.currentX_ = d.x;
                        a.currentY_ = d.y
                    }, Q = function (a, b) {
                        var c = C(a.strokeStyle), d = c.color, c = c.alpha * a.globalAlpha, e = a.lineScale_ * a.lineWidth;
                        1 > e && (c *= e);
                        b.push("<g_vml_:stroke", ' opacity="', c, '"', ' joinstyle="', a.lineJoin, '"', ' miterlimit="', a.miterLimit, '"', ' endcap="', H(a.lineCap), '"', ' weight="', e, 'px"', ' color="', d, '" />')
                    }, S = function (a, b, c, d) {
                        var e = a.fillStyle, f = a.arcScaleX_, g = a.arcScaleY_, m = d.x - c.x, p = d.y - c.y;
                        if (e instanceof W) {
                            var y = 0, w = d = 0, v = 0, t = 1;
                            if ("gradient" == e.type_) {
                                var y = e.x1_ / f, c = e.y1_ / g, q = a.getCoords_(e.x0_ / f, e.y0_ / g),
                                    y = a.getCoords_(y, c), y = 180 * Math.atan2(y.x - q.x, y.y - q.y) / Math.PI;
                                0 > y && (y += 360);
                                1E-6 > y && (y = 0)
                            } else q = a.getCoords_(e.x0_, e.y0_), d = (q.x - c.x) / m, w = (q.y - c.y) / p, m /= f * R, p /= g * R, t = Y.max(m, p), v = 2 * e.r0_ / t, t = 2 * e.r1_ / t - v;
                            f = e.colors_;
                            f.sort(function (a, b) {
                                return a.offset - b.offset
                            });
                            for (var g = f.length, q = f[0].color, c = f[g - 1].color, m = f[0].alpha * a.globalAlpha, a = f[g - 1].alpha * a.globalAlpha, p = [], B = 0; B < g; B++) {
                                var ra = f[B];
                                p.push(ra.offset * t + v + " " +
                                    ra.color)
                            }
                            b.push('<g_vml_:fill type="', e.type_, '"', ' method="none" focus="100%"', ' color="', q, '"', ' color2="', c, '"', ' colors="', p.join(","), '"', ' opacity="', a, '"', ' g_o_:opacity2="', m, '"', ' angle="', y, '"', ' focusposition="', d, ",", w, '" />')
                        } else e instanceof ba ? m && p && b.push("<g_vml_:fill", ' position="', -c.x / m * f * f, ",", -c.y / p * g * g, '"', ' type="tile"', ' src="', e.src_, '" />') : (e = C(a.fillStyle), b.push('<g_vml_:fill color="', e.color, '" opacity="', e.alpha * a.globalAlpha, '" />'))
                    }, T = function (a, b, c) {
                        isFinite(b[0][0]) &&
                        (isFinite(b[0][1]) && isFinite(b[1][0]) && isFinite(b[1][1]) && isFinite(b[2][0]) && isFinite(b[2][1])) && (a.m_ = b, c && (a.lineScale_ = f(da(b[0][0] * b[1][1] - b[0][1] * b[1][0]))))
                    }, W = function (a) {
                        this.type_ = a;
                        this.r1_ = this.y1_ = this.x1_ = this.r0_ = this.y0_ = this.x0_ = 0;
                        this.colors_ = []
                    }, ba = function (a, b) {
                        if (!a || 1 != a.nodeType || "IMG" != a.tagName) throw new aa("TYPE_MISMATCH_ERR");
                        if ("complete" != a.readyState) throw new aa("INVALID_STATE_ERR");
                        switch (b) {
                            case "repeat":
                            case null:
                            case "":
                                this.repetition_ = "repeat";
                                break;
                            case "repeat-x":
                            case "repeat-y":
                            case "no-repeat":
                                this.repetition_ =
                                    b;
                                break;
                            default:
                                throw new aa("SYNTAX_ERR");
                        }
                        this.src_ = a.src;
                        this.width_ = a.width;
                        this.height_ = a.height
                    }, aa = function (a) {
                        this.code = this[a];
                        this.message = a + ": DOM Exception " + this.code
                    }, Y = Math, fa = Y.round, ha = Y.sin, t = Y.cos, da = Y.abs, f = Y.sqrt, R = 10, v = R / 2,
                    X = Array.prototype.slice;
                e(document);
                var ea = {
                    init: function (a) {
                        /MSIE/.test(navigator.userAgent) && !window.opera && (a = a || document, a.createElement("canvas"), a.attachEvent("onreadystatechange", c(this.init_, this, a)))
                    }, init_: function (a) {
                        for (var a = a.getElementsByTagName("canvas"),
                                 b = 0; b < a.length; b++) this.initElement(a[b])
                    }, initElement: function (a) {
                        if (!a.getContext) {
                            a.getContext = b;
                            e(a.ownerDocument);
                            a.innerHTML = "";
                            a.attachEvent("onpropertychange", g);
                            a.attachEvent("onresize", p);
                            var c = a.attributes;
                            c.width && c.width.specified ? a.style.width = c.width.nodeValue + "px" : a.width = a.clientWidth;
                            c.height && c.height.specified ? a.style.height = c.height.nodeValue + "px" : a.height = a.clientHeight
                        }
                        return a
                    }
                };
                ea.init();
                for (var ca = [], K = 0; 16 > K; K++) for (var ia = 0; 16 > ia; ia++) ca[16 * K + ia] = K.toString(16) + ia.toString(16);
                var ta = {
                    aliceblue: "#F0F8FF",
                    antiquewhite: "#FAEBD7",
                    aquamarine: "#7FFFD4",
                    azure: "#F0FFFF",
                    beige: "#F5F5DC",
                    bisque: "#FFE4C4",
                    black: "#000000",
                    blanchedalmond: "#FFEBCD",
                    blueviolet: "#8A2BE2",
                    brown: "#A52A2A",
                    burlywood: "#DEB887",
                    cadetblue: "#5F9EA0",
                    chartreuse: "#7FFF00",
                    chocolate: "#D2691E",
                    coral: "#FF7F50",
                    cornflowerblue: "#6495ED",
                    cornsilk: "#FFF8DC",
                    crimson: "#DC143C",
                    cyan: "#00FFFF",
                    darkblue: "#00008B",
                    darkcyan: "#008B8B",
                    darkgoldenrod: "#B8860B",
                    darkgray: "#A9A9A9",
                    darkgreen: "#006400",
                    darkgrey: "#A9A9A9",
                    darkkhaki: "#BDB76B",
                    darkmagenta: "#8B008B",
                    darkolivegreen: "#556B2F",
                    darkorange: "#FF8C00",
                    darkorchid: "#9932CC",
                    darkred: "#8B0000",
                    darksalmon: "#E9967A",
                    darkseagreen: "#8FBC8F",
                    darkslateblue: "#483D8B",
                    darkslategray: "#2F4F4F",
                    darkslategrey: "#2F4F4F",
                    darkturquoise: "#00CED1",
                    darkviolet: "#9400D3",
                    deeppink: "#FF1493",
                    deepskyblue: "#00BFFF",
                    dimgray: "#696969",
                    dimgrey: "#696969",
                    dodgerblue: "#1E90FF",
                    firebrick: "#B22222",
                    floralwhite: "#FFFAF0",
                    forestgreen: "#228B22",
                    gainsboro: "#DCDCDC",
                    ghostwhite: "#F8F8FF",
                    gold: "#FFD700",
                    goldenrod: "#DAA520",
                    grey: "#808080",
                    greenyellow: "#ADFF2F",
                    honeydew: "#F0FFF0",
                    hotpink: "#FF69B4",
                    indianred: "#CD5C5C",
                    indigo: "#4B0082",
                    ivory: "#FFFFF0",
                    khaki: "#F0E68C",
                    lavender: "#E6E6FA",
                    lavenderblush: "#FFF0F5",
                    lawngreen: "#7CFC00",
                    lemonchiffon: "#FFFACD",
                    lightblue: "#ADD8E6",
                    lightcoral: "#F08080",
                    lightcyan: "#E0FFFF",
                    lightgoldenrodyellow: "#FAFAD2",
                    lightgreen: "#90EE90",
                    lightgrey: "#D3D3D3",
                    lightpink: "#FFB6C1",
                    lightsalmon: "#FFA07A",
                    lightseagreen: "#20B2AA",
                    lightskyblue: "#87CEFA",
                    lightslategray: "#778899",
                    lightslategrey: "#778899",
                    lightsteelblue: "#B0C4DE",
                    lightyellow: "#FFFFE0",
                    limegreen: "#32CD32",
                    linen: "#FAF0E6",
                    magenta: "#FF00FF",
                    mediumaquamarine: "#66CDAA",
                    mediumblue: "#0000CD",
                    mediumorchid: "#BA55D3",
                    mediumpurple: "#9370DB",
                    mediumseagreen: "#3CB371",
                    mediumslateblue: "#7B68EE",
                    mediumspringgreen: "#00FA9A",
                    mediumturquoise: "#48D1CC",
                    mediumvioletred: "#C71585",
                    midnightblue: "#191970",
                    mintcream: "#F5FFFA",
                    mistyrose: "#FFE4E1",
                    moccasin: "#FFE4B5",
                    navajowhite: "#FFDEAD",
                    oldlace: "#FDF5E6",
                    olivedrab: "#6B8E23",
                    orange: "#FFA500",
                    orangered: "#FF4500",
                    orchid: "#DA70D6",
                    palegoldenrod: "#EEE8AA",
                    palegreen: "#98FB98",
                    paleturquoise: "#AFEEEE",
                    palevioletred: "#DB7093",
                    papayawhip: "#FFEFD5",
                    peachpuff: "#FFDAB9",
                    peru: "#CD853F",
                    pink: "#FFC0CB",
                    plum: "#DDA0DD",
                    powderblue: "#B0E0E6",
                    rosybrown: "#BC8F8F",
                    royalblue: "#4169E1",
                    saddlebrown: "#8B4513",
                    salmon: "#FA8072",
                    sandybrown: "#F4A460",
                    seagreen: "#2E8B57",
                    seashell: "#FFF5EE",
                    sienna: "#A0522D",
                    skyblue: "#87CEEB",
                    slateblue: "#6A5ACD",
                    slategray: "#708090",
                    slategrey: "#708090",
                    snow: "#FFFAFA",
                    springgreen: "#00FF7F",
                    steelblue: "#4682B4",
                    tan: "#D2B48C",
                    thistle: "#D8BFD8",
                    tomato: "#FF6347",
                    turquoise: "#40E0D0",
                    violet: "#EE82EE",
                    wheat: "#F5DEB3",
                    whitesmoke: "#F5F5F5",
                    yellowgreen: "#9ACD32"
                }, qa = {}, K = L.prototype;
                K.clearRect = function () {
                    this.textMeasureEl_ && (this.textMeasureEl_.removeNode(!0), this.textMeasureEl_ = null);
                    this.element_.innerHTML = ""
                };
                K.beginPath = function () {
                    this.currentPath_ = []
                };
                K.moveTo = function (a, b) {
                    var c = this.getCoords_(a, b);
                    this.currentPath_.push({type: "moveTo", x: c.x, y: c.y});
                    this.currentX_ = c.x;
                    this.currentY_ = c.y
                };
                K.lineTo = function (a,
                                     b) {
                    var c = this.getCoords_(a, b);
                    this.currentPath_.push({type: "lineTo", x: c.x, y: c.y});
                    this.currentX_ = c.x;
                    this.currentY_ = c.y
                };
                K.bezierCurveTo = function (a, b, c, d, e, f) {
                    e = this.getCoords_(e, f);
                    a = this.getCoords_(a, b);
                    c = this.getCoords_(c, d);
                    U(this, a, c, e)
                };
                K.quadraticCurveTo = function (a, b, c, d) {
                    a = this.getCoords_(a, b);
                    c = this.getCoords_(c, d);
                    d = {
                        x: this.currentX_ + 2 / 3 * (a.x - this.currentX_),
                        y: this.currentY_ + 2 / 3 * (a.y - this.currentY_)
                    };
                    U(this, d, {x: d.x + (c.x - this.currentX_) / 3, y: d.y + (c.y - this.currentY_) / 3}, c)
                };
                K.arc = function (a,
                                  b, c, d, e, f) {
                    var c = c * R, g = f ? "at" : "wa", m = a + t(d) * c - v, p = b + ha(d) * c - v,
                        d = a + t(e) * c - v, e = b + ha(e) * c - v;
                    m == d && !f && (m += 0.125);
                    a = this.getCoords_(a, b);
                    m = this.getCoords_(m, p);
                    d = this.getCoords_(d, e);
                    this.currentPath_.push({
                        type: g,
                        x: a.x,
                        y: a.y,
                        radius: c,
                        xStart: m.x,
                        yStart: m.y,
                        xEnd: d.x,
                        yEnd: d.y
                    })
                };
                K.rect = function (a, b, c, d) {
                    this.moveTo(a, b);
                    this.lineTo(a + c, b);
                    this.lineTo(a + c, b + d);
                    this.lineTo(a, b + d);
                    this.closePath()
                };
                K.strokeRect = function (a, b, c, d) {
                    var e = this.currentPath_;
                    this.beginPath();
                    this.moveTo(a, b);
                    this.lineTo(a + c, b);
                    this.lineTo(a + c, b + d);
                    this.lineTo(a, b + d);
                    this.closePath();
                    this.stroke();
                    this.currentPath_ = e
                };
                K.fillRect = function (a, b, c, d) {
                    var e = this.currentPath_;
                    this.beginPath();
                    this.moveTo(a, b);
                    this.lineTo(a + c, b);
                    this.lineTo(a + c, b + d);
                    this.lineTo(a, b + d);
                    this.closePath();
                    this.fill();
                    this.currentPath_ = e
                };
                K.createLinearGradient = function (a, b, c, d) {
                    var e = new W("gradient");
                    e.x0_ = a;
                    e.y0_ = b;
                    e.x1_ = c;
                    e.y1_ = d;
                    return e
                };
                K.createRadialGradient = function (a, b, c, d, e, f) {
                    var g = new W("gradientradial");
                    g.x0_ = a;
                    g.y0_ = b;
                    g.r0_ = c;
                    g.x1_ = d;
                    g.y1_ = e;
                    g.r1_ = f;
                    return g
                };
                K.drawImage = function (a, b) {
                    var c, d, e, f, g, m, p, y;
                    e = a.runtimeStyle.width;
                    f = a.runtimeStyle.height;
                    a.runtimeStyle.width = "auto";
                    a.runtimeStyle.height = "auto";
                    var w = a.width, v = a.height;
                    a.runtimeStyle.width = e;
                    a.runtimeStyle.height = f;
                    if (3 == arguments.length) c = arguments[1], d = arguments[2], g = m = 0, p = e = w, y = f = v; else if (5 == arguments.length) c = arguments[1], d = arguments[2], e = arguments[3], f = arguments[4], g = m = 0, p = w, y = v; else if (9 == arguments.length) g = arguments[1], m = arguments[2], p = arguments[3], y = arguments[4],
                        c = arguments[5], d = arguments[6], e = arguments[7], f = arguments[8]; else throw Error("Invalid number of arguments");
                    var t = this.getCoords_(c, d), q = [];
                    q.push(" <g_vml_:group", ' coordsize="', 10 * R, ",", 10 * R, '"', ' coordorigin="0,0"', ' style="width:', 10, "px;height:", 10, "px;position:absolute;");
                    if (1 != this.m_[0][0] || this.m_[0][1] || 1 != this.m_[1][1] || this.m_[1][0]) {
                        var B = [];
                        B.push("M11=", this.m_[0][0], ",", "M12=", this.m_[1][0], ",", "M21=", this.m_[0][1], ",", "M22=", this.m_[1][1], ",", "Dx=", fa(t.x / R), ",", "Dy=", fa(t.y / R), "");
                        var ra = this.getCoords_(c + e, d), F = this.getCoords_(c, d + f);
                        c = this.getCoords_(c + e, d + f);
                        t.x = Y.max(t.x, ra.x, F.x, c.x);
                        t.y = Y.max(t.y, ra.y, F.y, c.y);
                        q.push("padding:0 ", fa(t.x / R), "px ", fa(t.y / R), "px 0;filter:progid:DXImageTransform.Microsoft.Matrix(", B.join(""), ", sizingmethod='clip');")
                    } else q.push("top:", fa(t.y / R), "px;left:", fa(t.x / R), "px;");
                    q.push(' ">', '<g_vml_:image src="', a.src, '"', ' style="width:', R * e, "px;", " height:", R * f, 'px"', ' cropleft="', g / w, '"', ' croptop="', m / v, '"', ' cropright="', (w - g - p) / w, '"', ' cropbottom="',
                        (v - m - y) / v, '"', " />", "</g_vml_:group>");
                    this.element_.insertAdjacentHTML("BeforeEnd", q.join(""))
                };
                K.stroke = function (a) {
                    for (var b = {x: null, y: null}, c = {
                        x: null,
                        y: null
                    }, d = 0; d < this.currentPath_.length; d += 5E3) {
                        var e = [];
                        e.push("<g_vml_:shape", ' filled="', !!a, '"', ' style="position:absolute;width:', 10, "px;height:", 10, 'px;"', ' coordorigin="0,0"', ' coordsize="', 10 * R, ",", 10 * R, '"', ' stroked="', !a, '"', ' path="');
                        for (var f = d; f < Math.min(d + 5E3, this.currentPath_.length); f++) {
                            0 == f % 5E3 && 0 < f && e.push(" m ", fa(this.currentPath_[f -
                            1].x), ",", fa(this.currentPath_[f - 1].y));
                            var g = this.currentPath_[f];
                            switch (g.type) {
                                case "moveTo":
                                    e.push(" m ", fa(g.x), ",", fa(g.y));
                                    break;
                                case "lineTo":
                                    e.push(" l ", fa(g.x), ",", fa(g.y));
                                    break;
                                case "close":
                                    e.push(" x ");
                                    g = null;
                                    break;
                                case "bezierCurveTo":
                                    e.push(" c ", fa(g.cp1x), ",", fa(g.cp1y), ",", fa(g.cp2x), ",", fa(g.cp2y), ",", fa(g.x), ",", fa(g.y));
                                    break;
                                case "at":
                                case "wa":
                                    e.push(" ", g.type, " ", fa(g.x - this.arcScaleX_ * g.radius), ",", fa(g.y - this.arcScaleY_ * g.radius), " ", fa(g.x + this.arcScaleX_ * g.radius), ",",
                                        fa(g.y + this.arcScaleY_ * g.radius), " ", fa(g.xStart), ",", fa(g.yStart), " ", fa(g.xEnd), ",", fa(g.yEnd))
                            }
                            if (g) {
                                if (null == b.x || g.x < b.x) b.x = g.x;
                                if (null == c.x || g.x > c.x) c.x = g.x;
                                if (null == b.y || g.y < b.y) b.y = g.y;
                                if (null == c.y || g.y > c.y) c.y = g.y
                            }
                        }
                        e.push(' ">');
                        a ? S(this, e, b, c) : Q(this, e);
                        e.push("</g_vml_:shape>");
                        this.element_.insertAdjacentHTML("beforeEnd", e.join(""))
                    }
                };
                K.fill = function () {
                    this.stroke(!0)
                };
                K.closePath = function () {
                    this.currentPath_.push({type: "close"})
                };
                K.getCoords_ = function (a, b) {
                    var c = this.m_;
                    return {
                        x: R * (a *
                            c[0][0] + b * c[1][0] + c[2][0]) - v, y: R * (a * c[0][1] + b * c[1][1] + c[2][1]) - v
                    }
                };
                K.save = function () {
                    var a = {};
                    q(this, a);
                    this.aStack_.push(a);
                    this.mStack_.push(this.m_);
                    this.m_ = w(y(), this.m_)
                };
                K.restore = function () {
                    this.aStack_.length && (q(this.aStack_.pop(), this), this.m_ = this.mStack_.pop())
                };
                K.translate = function (a, b) {
                    T(this, w([[1, 0, 0], [0, 1, 0], [a, b, 1]], this.m_), !1)
                };
                K.rotate = function (a) {
                    var b = t(a), a = ha(a);
                    T(this, w([[b, a, 0], [-a, b, 0], [0, 0, 1]], this.m_), !1)
                };
                K.scale = function (a, b) {
                    this.arcScaleX_ *= a;
                    this.arcScaleY_ *= b;
                    T(this,
                        w([[a, 0, 0], [0, b, 0], [0, 0, 1]], this.m_), !0)
                };
                K.transform = function (a, b, c, d, e, f) {
                    T(this, w([[a, b, 0], [c, d, 0], [e, f, 1]], this.m_), !0)
                };
                K.setTransform = function (a, b, c, d, e, f) {
                    T(this, [[a, b, 0], [c, d, 0], [e, f, 1]], !0)
                };
                K.drawText_ = function (a, b, c, e, f) {
                    var g = this.m_, e = 0, m = 1E3, p = 0, y = [], t;
                    t = this.font;
                    if (qa[t]) t = qa[t]; else {
                        var w = document.createElement("div").style;
                        try {
                            w.font = t
                        } catch (v) {
                        }
                        t = qa[t] = {
                            style: w.fontStyle || "normal",
                            variant: w.fontVariant || "normal",
                            weight: w.fontWeight || "normal",
                            size: w.fontSize || 10,
                            family: w.fontFamily ||
                                "sans-serif"
                        }
                    }
                    var w = t, q = this.element_;
                    t = {};
                    for (var B in w) t[B] = w[B];
                    B = parseFloat(q.currentStyle.fontSize);
                    q = parseFloat(w.size);
                    t.size = "number" == typeof w.size ? w.size : -1 != w.size.indexOf("px") ? q : -1 != w.size.indexOf("em") ? B * q : -1 != w.size.indexOf("%") ? B / 100 * q : -1 != w.size.indexOf("pt") ? q / 0.75 : B;
                    t.size *= 0.981;
                    B = t.style + " " + t.variant + " " + t.weight + " " + t.size + "px " + t.family;
                    q = this.element_.currentStyle;
                    w = this.textAlign.toLowerCase();
                    switch (w) {
                        case "left":
                        case "center":
                        case "right":
                            break;
                        case "end":
                            w = "ltr" == q.direction ?
                                "right" : "left";
                            break;
                        case "start":
                            w = "rtl" == q.direction ? "right" : "left";
                            break;
                        default:
                            w = "left"
                    }
                    switch (this.textBaseline) {
                        case "hanging":
                        case "top":
                            p = t.size / 1.75;
                            break;
                        case "middle":
                            break;
                        default:
                        case null:
                        case "alphabetic":
                        case "ideographic":
                        case "bottom":
                            p = -t.size / 2.25
                    }
                    switch (w) {
                        case "right":
                            e = 1E3;
                            m = 0.05;
                            break;
                        case "center":
                            e = m = 500
                    }
                    b = this.getCoords_(b + 0, c + p);
                    y.push('<g_vml_:line from="', -e, ' 0" to="', m, ' 0.05" ', ' coordsize="100 100" coordorigin="0 0"', ' filled="', !f, '" stroked="', !!f, '" style="position:absolute;width:1px;height:1px;">');
                    f ? Q(this, y) : S(this, y, {x: -e, y: 0}, {x: m, y: t.size});
                    f = g[0][0].toFixed(3) + "," + g[1][0].toFixed(3) + "," + g[0][1].toFixed(3) + "," + g[1][1].toFixed(3) + ",0,0";
                    b = fa(b.x / R) + "," + fa(b.y / R);
                    y.push('<g_vml_:skew on="t" matrix="', f, '" ', ' offset="', b, '" origin="', e, ' 0" />', '<g_vml_:path textpathok="true" />', '<g_vml_:textpath on="true" string="', d(a), '" style="v-text-align:', w, ";font:", d(B), '" /></g_vml_:line>');
                    this.element_.insertAdjacentHTML("beforeEnd", y.join(""))
                };
                K.fillText = function (a, b, c, d) {
                    this.drawText_(a, b,
                        c, d, !1)
                };
                K.strokeText = function (a, b, c, d) {
                    this.drawText_(a, b, c, d, !0)
                };
                K.measureText = function (a) {
                    this.textMeasureEl_ || (this.element_.insertAdjacentHTML("beforeEnd", '<span style="position:absolute;top:-20000px;left:0;padding:0;margin:0;border:none;white-space:pre;"></span>'), this.textMeasureEl_ = this.element_.lastChild);
                    var b = this.element_.ownerDocument;
                    this.textMeasureEl_.innerHTML = "";
                    this.textMeasureEl_.style.font = this.font;
                    this.textMeasureEl_.appendChild(b.createTextNode(a));
                    return {width: this.textMeasureEl_.offsetWidth}
                };
                K.clip = function () {
                };
                K.arcTo = function () {
                };
                K.createPattern = function (a, b) {
                    return new ba(a, b)
                };
                W.prototype.addColorStop = function (a, b) {
                    b = C(b);
                    this.colors_.push({offset: a, color: b.color, alpha: b.alpha})
                };
                K = aa.prototype = Error();
                K.INDEX_SIZE_ERR = 1;
                K.DOMSTRING_SIZE_ERR = 2;
                K.HIERARCHY_REQUEST_ERR = 3;
                K.WRONG_DOCUMENT_ERR = 4;
                K.INVALID_CHARACTER_ERR = 5;
                K.NO_DATA_ALLOWED_ERR = 6;
                K.NO_MODIFICATION_ALLOWED_ERR = 7;
                K.NOT_FOUND_ERR = 8;
                K.NOT_SUPPORTED_ERR = 9;
                K.INUSE_ATTRIBUTE_ERR = 10;
                K.INVALID_STATE_ERR = 11;
                K.SYNTAX_ERR = 12;
                K.INVALID_MODIFICATION_ERR =
                    13;
                K.NAMESPACE_ERR = 14;
                K.INVALID_ACCESS_ERR = 15;
                K.VALIDATION_ERR = 16;
                K.TYPE_MISMATCH_ERR = 17;
                G_vmlCanvasManager = ea;
                CanvasRenderingContext2D = L;
                CanvasGradient = W;
                CanvasPattern = ba;
                DOMException = aa
            }
            var $ = Ua;
            $.color = {};
            $.color.make = function (a, b, c, d) {
                var e = {};
                e.r = a || 0;
                e.g = b || 0;
                e.b = c || 0;
                e.a = null != d ? d : 1;
                e.add = function (a, b) {
                    for (var c = 0; c < a.length; ++c) e[a.charAt(c)] += b;
                    return e.normalize()
                };
                e.scale = function (a, b) {
                    for (var c = 0; c < a.length; ++c) e[a.charAt(c)] *= b;
                    return e.normalize()
                };
                e.toString = function () {
                    return 1 <= e.a ?
                        "rgb(" + [e.r, e.g, e.b].join() + ")" : "rgba(" + [e.r, e.g, e.b, e.a].join() + ")"
                };
                e.normalize = function () {
                    function a(b, c, d) {
                        return c < b ? b : c > d ? d : c
                    }

                    e.r = a(0, parseInt(e.r), 255);
                    e.g = a(0, parseInt(e.g), 255);
                    e.b = a(0, parseInt(e.b), 255);
                    e.a = a(0, e.a, 1);
                    return e
                };
                e.clone = function () {
                    return $.color.make(e.r, e.b, e.g, e.a)
                };
                return e.normalize()
            };
            $.color.extract = function (a, b) {
                var c;
                do {
                    c = a.css(b).toLowerCase();
                    if ("" != c && "transparent" != c) break;
                    a = a.parent()
                } while (!$.nodeName(a.get(0), "body"));
                "rgba(0, 0, 0, 0)" == c && (c = "transparent");
                return $.color.parse(c)
            };
            $.color.parse = function (a) {
                var b, c = $.color.make;
                if (b = /rgb\(\s*([0-9]{1,3})\s*,\s*([0-9]{1,3})\s*,\s*([0-9]{1,3})\s*\)/.exec(a)) return c(parseInt(b[1], 10), parseInt(b[2], 10), parseInt(b[3], 10));
                if (b = /rgba\(\s*([0-9]{1,3})\s*,\s*([0-9]{1,3})\s*,\s*([0-9]{1,3})\s*,\s*([0-9]+(?:\.[0-9]+)?)\s*\)/.exec(a)) return c(parseInt(b[1], 10), parseInt(b[2], 10), parseInt(b[3], 10), parseFloat(b[4]));
                if (b = /rgb\(\s*([0-9]+(?:\.[0-9]+)?)\%\s*,\s*([0-9]+(?:\.[0-9]+)?)\%\s*,\s*([0-9]+(?:\.[0-9]+)?)\%\s*\)/.exec(a)) return c(2.55 *
                    parseFloat(b[1]), 2.55 * parseFloat(b[2]), 2.55 * parseFloat(b[3]));
                if (b = /rgba\(\s*([0-9]+(?:\.[0-9]+)?)\%\s*,\s*([0-9]+(?:\.[0-9]+)?)\%\s*,\s*([0-9]+(?:\.[0-9]+)?)\%\s*,\s*([0-9]+(?:\.[0-9]+)?)\s*\)/.exec(a)) return c(2.55 * parseFloat(b[1]), 2.55 * parseFloat(b[2]), 2.55 * parseFloat(b[3]), parseFloat(b[4]));
                if (b = /#([a-fA-F0-9]{2})([a-fA-F0-9]{2})([a-fA-F0-9]{2})/.exec(a)) return c(parseInt(b[1], 16), parseInt(b[2], 16), parseInt(b[3], 16));
                if (b = /#([a-fA-F0-9])([a-fA-F0-9])([a-fA-F0-9])/.exec(a)) return c(parseInt(b[1] +
                    b[1], 16), parseInt(b[2] + b[2], 16), parseInt(b[3] + b[3], 16));
                a = $.trim(a).toLowerCase();
                if ("transparent" == a) return c(255, 255, 255, 0);
                b = na[a] || [0, 0, 0];
                return c(b[0], b[1], b[2])
            };
            var na = {
                aqua: [0, 255, 255],
                azure: [240, 255, 255],
                beige: [245, 245, 220],
                black: [0, 0, 0],
                blue: [0, 0, 255],
                brown: [165, 42, 42],
                cyan: [0, 255, 255],
                darkblue: [0, 0, 139],
                darkcyan: [0, 139, 139],
                darkgrey: [169, 169, 169],
                darkgreen: [0, 100, 0],
                darkkhaki: [189, 183, 107],
                darkmagenta: [139, 0, 139],
                darkolivegreen: [85, 107, 47],
                darkorange: [255, 140, 0],
                darkorchid: [153, 50, 204],
                darkred: [139, 0, 0],
                darksalmon: [233, 150, 122],
                darkviolet: [148, 0, 211],
                fuchsia: [255, 0, 255],
                gold: [255, 215, 0],
                green: [0, 128, 0],
                indigo: [75, 0, 130],
                khaki: [240, 230, 140],
                lightblue: [173, 216, 230],
                lightcyan: [224, 255, 255],
                lightgreen: [144, 238, 144],
                lightgrey: [211, 211, 211],
                lightpink: [255, 182, 193],
                lightyellow: [255, 255, 224],
                lime: [0, 255, 0],
                magenta: [255, 0, 255],
                maroon: [128, 0, 0],
                navy: [0, 0, 128],
                olive: [128, 128, 0],
                orange: [255, 165, 0],
                pink: [255, 192, 203],
                purple: [128, 0, 128],
                violet: [128, 0, 128],
                red: [255, 0, 0],
                silver: [192, 192, 192],
                white: [255,
                    255, 255],
                yellow: [255, 255, 0]
            }, I = Ua, oa = function (a, b, c, d) {
                function e(a, b) {
                    for (var b = [la].concat(b), c = 0; c < a.length; ++c) a[c].apply(this, b)
                }

                function f(a) {
                    for (var b = [], c = 0; c < a.length; ++c) {
                        var d = I.extend(!0, {}, u.series);
                        null != a[c].data ? (d.data = a[c].data, delete a[c].data, I.extend(!0, d, a[c]), a[c].data = d.data) : d.data = a[c];
                        b.push(d)
                    }
                    G = b;
                    b = G.length;
                    c = [];
                    d = [];
                    for (a = 0; a < G.length; ++a) {
                        var r = G[a].color;
                        null != r && (--b, "number" == typeof r ? d.push(r) : c.push(I.color.parse(G[a].color)))
                    }
                    for (a = 0; a < d.length; ++a) b = Math.max(b,
                        d[a] + 1);
                    c = [];
                    for (a = d = 0; c.length < b;) r = u.colors.length == a ? I.color.make(100, 100, 100) : I.color.parse(u.colors[a]), r.scale("rgb", 1 + 0.2 * (1 == d % 2 ? -1 : 1) * Math.ceil(d / 2)), c.push(r), ++a, a >= u.colors.length && (a = 0, ++d);
                    for (a = b = 0; a < G.length; ++a) {
                        d = G[a];
                        null == d.color ? (d.color = c[b].toString(), ++b) : "number" == typeof d.color && (d.color = c[d.color].toString());
                        if (null == d.lines.show) {
                            var n, r = !0;
                            for (n in d) if (d[n] && d[n].show) {
                                r = !1;
                                break
                            }
                            r && (d.lines.show = !0)
                        }
                        d.xaxis = y($, g(d, "x"));
                        d.yaxis = y(da, g(d, "y"))
                    }
                    n = function (a, b, c) {
                        b < a.datamin &&
                        b != -t && (a.datamin = b);
                        c > a.datamax && c != t && (a.datamax = c)
                    };
                    var p = Number.POSITIVE_INFINITY, w = Number.NEGATIVE_INFINITY, t = Number.MAX_VALUE, ja, q, P, v,
                        V;
                    I.each(m(), function (a, b) {
                        b.datamin = p;
                        b.datamax = w;
                        b.used = !1
                    });
                    for (a = 0; a < G.length; ++a) b = G[a], b.datapoints = {points: []}, e(Ja.processRawData, [b, b.data, b.datapoints]);
                    for (a = 0; a < G.length; ++a) {
                        var b = G[a], A = b.data, ma = b.datapoints.format;
                        if (!ma) {
                            ma = [];
                            ma.push({x: !0, number: !0, required: !0});
                            ma.push({y: !0, number: !0, required: !0});
                            if (b.bars.show || b.lines.show && b.lines.fill) ma.push({
                                y: !0,
                                number: !0, required: !1, defaultValue: 0
                            }), b.bars.horizontal && (delete ma[ma.length - 1].y, ma[ma.length - 1].x = !0);
                            b.datapoints.format = ma
                        }
                        if (null == b.datapoints.pointsize) {
                            b.datapoints.pointsize = ma.length;
                            q = b.datapoints.pointsize;
                            r = b.datapoints.points;
                            insertSteps = b.lines.show && b.lines.steps;
                            b.xaxis.used = b.yaxis.used = !0;
                            for (c = ja = 0; c < A.length; ++c, ja += q) {
                                V = A[c];
                                var J = null == V;
                                if (!J) for (d = 0; d < q; ++d) {
                                    P = V[d];
                                    if (v = ma[d]) v.number && null != P && (P = +P, isNaN(P) ? P = null : Infinity == P ? P = t : -Infinity == P && (P = -t)), null == P && (v.required &&
                                    (J = !0), null != v.defaultValue && (P = v.defaultValue));
                                    r[ja + d] = P
                                }
                                if (J) for (d = 0; d < q; ++d) P = r[ja + d], null != P && (v = ma[d], v.x && n(b.xaxis, P, P), v.y && n(b.yaxis, P, P)), r[ja + d] = null; else if (insertSteps && 0 < ja && null != r[ja - q] && r[ja - q] != r[ja] && r[ja - q + 1] != r[ja + 1]) {
                                    for (d = 0; d < q; ++d) r[ja + q + d] = r[ja + d];
                                    r[ja + 1] = r[ja - q + 1];
                                    ja += q
                                }
                            }
                        }
                    }
                    for (a = 0; a < G.length; ++a) b = G[a], e(Ja.processDatapoints, [b, b.datapoints]);
                    for (a = 0; a < G.length; ++a) {
                        b = G[a];
                        r = b.datapoints.points;
                        q = b.datapoints.pointsize;
                        V = ja = p;
                        J = A = w;
                        for (c = 0; c < r.length; c += q) if (null != r[c]) for (d =
                                                                                     0; d < q; ++d) if (P = r[c + d], (v = ma[d]) && !(P == t || P == -t)) v.x && (P < ja && (ja = P), P > A && (A = P)), v.y && (P < V && (V = P), P > J && (J = P));
                        b.bars.show && (c = "left" == b.bars.align ? 0 : -b.bars.barWidth / 2, b.bars.horizontal ? (V += c, J += c + b.bars.barWidth) : (ja += c, A += c + b.bars.barWidth));
                        n(b.xaxis, ja, A);
                        n(b.yaxis, V, J)
                    }
                    I.each(m(), function (a, b) {
                        b.datamin == p && (b.datamin = null);
                        b.datamax == w && (b.datamax = null)
                    })
                }

                function g(a, b) {
                    var c = a[b + "axis"];
                    "object" == typeof c && (c = c.n);
                    "number" != typeof c && (c = 1);
                    return c
                }

                function m() {
                    return I.grep($.concat(da), function (a) {
                        return a
                    })
                }

                function p(a) {
                    var b = {}, c, d;
                    for (c = 0; c < $.length; ++c) (d = $[c]) && d.used && (b["x" + d.n] = d.c2p(a.left));
                    for (c = 0; c < da.length; ++c) (d = da[c]) && d.used && (b["y" + d.n] = d.c2p(a.top));
                    b.x1 !== sa && (b.x = b.x1);
                    b.y1 !== sa && (b.y = b.y1);
                    return b
                }

                function y(a, b) {
                    a[b - 1] || (a[b - 1] = {
                        n: b,
                        direction: a == $ ? "x" : "y",
                        options: I.extend(!0, {}, a == $ ? u.xaxis : u.yaxis)
                    });
                    return a[b - 1]
                }

                function w(b, c) {
                    var d = document.createElement("canvas");
                    d.className = c;
                    d.width = ca;
                    d.height = ea;
                    b || I(d).css({position: "absolute", left: 0, top: 0});
                    I(d).appendTo(a);
                    d.getContext ||
                    (d = window.G_vmlCanvasManager.initElement(d));
                    d.getContext("2d").save();
                    return d
                }

                function t() {
                    ca = a.width();
                    ea = a.height();
                    if (0 >= ca || 0 >= ea) throw"Invalid dimensions for plot, width = " + ca + ", height = " + ea;
                }

                function q(a) {
                    a.width != ca && (a.width = ca);
                    a.height != ea && (a.height = ea);
                    a = a.getContext("2d");
                    a.restore();
                    a.save()
                }

                function v(a) {
                    var b = a.labelWidth, c = a.labelHeight, d = a.options.position, e = a.options.tickLength,
                        f = u.grid.axisMargin, g = u.grid.labelMargin, m = "x" == a.direction ? $ : da,
                        n = I.grep(m, function (a) {
                            return a &&
                                a.options.position == d && a.reserveSpace
                        });
                    I.inArray(a, n) == n.length - 1 && (f = 0);
                    null == e && (e = "full");
                    m = I.grep(m, function (a) {
                        return a && a.reserveSpace
                    });
                    m = 0 == I.inArray(a, m);
                    !m && "full" == e && (e = 5);
                    isNaN(+e) || (g += +e);
                    "x" == a.direction ? (c += g, "bottom" == d ? (N.bottom += c + f, a.box = {
                        top: ea - N.bottom,
                        height: c
                    }) : (a.box = {
                        top: N.top + f,
                        height: c
                    }, N.top += c + f)) : (b += g, "left" == d ? (a.box = {
                        left: N.left + f,
                        width: b
                    }, N.left += b + f) : (N.right += b + f, a.box = {left: ca - N.right, width: b}));
                    a.position = d;
                    a.tickLength = e;
                    a.box.padding = g;
                    a.innermost = m
                }

                function B() {
                    var b,
                        c = m();
                    I.each(c, function (a, b) {
                        b.show = b.options.show;
                        null == b.show && (b.show = b.used);
                        b.reserveSpace = b.show || b.options.reserveSpace;
                        var c = b.options, d = +(null != c.min ? c.min : b.datamin),
                            e = +(null != c.max ? c.max : b.datamax), f = e - d;
                        if (0 == f) {
                            if (f = 0 == e ? 1 : 0.01, null == c.min && (d -= f), null == c.max || null != c.min) e += f
                        } else {
                            var g = c.autoscaleMargin;
                            null != g && (null == c.min && (d -= f * g, 0 > d && (null != b.datamin && 0 <= b.datamin) && (d = 0)), null == c.max && (e += f * g, 0 < e && (null != b.datamax && 0 >= b.datamax) && (e = 0)))
                        }
                        b.min = d;
                        b.max = e
                    });
                    allocatedAxes = I.grep(c,
                        function (a) {
                            return a.reserveSpace
                        });
                    N.left = N.right = N.top = N.bottom = 0;
                    if (u.grid.show) {
                        I.each(allocatedAxes, function (b, c) {
                            var d = c.options, e;
                            e = "number" == typeof d.ticks && 0 < d.ticks ? d.ticks : 0.3 * Math.sqrt("x" == c.direction ? ca : ea);
                            e = (c.max - c.min) / e;
                            var f, g, k, m;
                            if ("time" == d.mode) {
                                var r = {
                                    second: 1E3,
                                    minute: 6E4,
                                    hour: 36E5,
                                    day: 864E5,
                                    month: 2592E6,
                                    year: 525949.2 * 6E4
                                };
                                m = [[1, "second"], [2, "second"], [5, "second"], [10, "second"], [30, "second"], [1, "minute"], [2, "minute"], [5, "minute"], [10, "minute"], [30, "minute"], [1, "hour"], [2,
                                    "hour"], [4, "hour"], [8, "hour"], [12, "hour"], [1, "day"], [2, "day"], [3, "day"], [0.25, "month"], [0.5, "month"], [1, "month"], [2, "month"], [3, "month"], [6, "month"], [1, "year"]];
                                f = 0;
                                null != d.minTickSize && (f = "number" == typeof d.tickSize ? d.tickSize : d.minTickSize[0] * r[d.minTickSize[1]]);
                                for (g = 0; g < m.length - 1 && !(e < (m[g][0] * r[m[g][1]] + m[g + 1][0] * r[m[g + 1][1]]) / 2 && m[g][0] * r[m[g][1]] >= f); ++g) ;
                                f = m[g][0];
                                k = m[g][1];
                                "year" == k && (g = Math.pow(10, Math.floor(Math.log(e / r.year) / Math.LN10)), m = e / r.year / g, f = (1.5 > m ? 1 : 3 > m ? 2 : 7.5 > m ? 5 : 10) * g);
                                c.tickSize =
                                    d.tickSize || [f, k];
                                g = function (a) {
                                    var b = [], c = a.tickSize[0], d = a.tickSize[1], e = new Date(a.min), f = c * r[d];
                                    "second" == d && e.setUTCSeconds(ua(e.getUTCSeconds(), c));
                                    "minute" == d && e.setUTCMinutes(ua(e.getUTCMinutes(), c));
                                    "hour" == d && e.setUTCHours(ua(e.getUTCHours(), c));
                                    "month" == d && e.setUTCMonth(ua(e.getUTCMonth(), c));
                                    "year" == d && e.setUTCFullYear(ua(e.getUTCFullYear(), c));
                                    e.setUTCMilliseconds(0);
                                    f >= r.minute && e.setUTCSeconds(0);
                                    f >= r.hour && e.setUTCMinutes(0);
                                    f >= r.day && e.setUTCHours(0);
                                    f >= 4 * r.day && e.setUTCDate(1);
                                    f >=
                                    r.year && e.setUTCMonth(0);
                                    var g = 0, k = Number.NaN, m;
                                    do if (m = k, k = e.getTime(), b.push(k), "month" == d) if (1 > c) {
                                        e.setUTCDate(1);
                                        var x = e.getTime();
                                        e.setUTCMonth(e.getUTCMonth() + 1);
                                        var n = e.getTime();
                                        e.setTime(k + g * r.hour + (n - x) * c);
                                        g = e.getUTCHours();
                                        e.setUTCHours(0)
                                    } else e.setUTCMonth(e.getUTCMonth() + c); else "year" == d ? e.setUTCFullYear(e.getUTCFullYear() + c) : e.setTime(k + f); while (k < a.max && k != m);
                                    return b
                                };
                                f = function (a, b) {
                                    var c = new Date(a);
                                    if (null != d.timeformat) return I.plot.formatDate(c, d.timeformat, d.monthNames);
                                    var e =
                                        b.tickSize[0] * r[b.tickSize[1]], f = b.max - b.min,
                                        g = d.twelveHourClock ? " %p" : "";
                                    fmt = e < r.minute ? "%h:%M:%S" + g : e < r.day ? f < 2 * r.day ? "%h:%M" + g : "%b %d %h:%M" + g : e < r.month ? "%b %d" : e < r.year ? f < r.year ? "%b" : "%b %y" : "%y";
                                    return I.plot.formatDate(c, fmt, d.monthNames)
                                }
                            } else {
                                k = d.tickDecimals;
                                var x = -Math.floor(Math.log(e) / Math.LN10);
                                null != k && x > k && (x = k);
                                g = Math.pow(10, -x);
                                m = e / g;
                                if (1.5 > m) f = 1; else if (3 > m) {
                                    if (f = 2, 2.25 < m && (null == k || x + 1 <= k)) f = 2.5, ++x
                                } else f = 7.5 > m ? 5 : 10;
                                f *= g;
                                null != d.minTickSize && f < d.minTickSize && (f = d.minTickSize);
                                c.tickDecimals = Math.max(0, null != k ? k : x);
                                c.tickSize = d.tickSize || f;
                                g = function (a) {
                                    var b = [], c = ua(a.min, a.tickSize), d = 0, e = Number.NaN, f;
                                    do f = e, e = c + d * a.tickSize, b.push(e), ++d; while (e < a.max && e != f);
                                    return b
                                };
                                f = function (a, b) {
                                    return a.toFixed(b.tickDecimals)
                                }
                            }
                            if (null != d.alignTicksWithAxis) {
                                var p = ("x" == c.direction ? $ : da)[d.alignTicksWithAxis - 1];
                                p && (p.used && p != c) && (g = g(c), 0 < g.length && (null == d.min && (c.min = Math.min(c.min, g[0])), null == d.max && 1 < g.length && (c.max = Math.max(c.max, g[g.length - 1]))), g = function (a) {
                                    var b = [],
                                        c, d;
                                    for (d = 0; d < p.ticks.length; ++d) c = (p.ticks[d].v - p.min) / (p.max - p.min), c = a.min + c * (a.max - a.min), b.push(c);
                                    return b
                                }, "time" != c.mode && null == d.tickDecimals && (e = Math.max(0, -Math.floor(Math.log(e) / Math.LN10) + 1), m = g(c), 1 < m.length && /\..*0$/.test((m[1] - m[0]).toFixed(e)) || (c.tickDecimals = e)))
                            }
                            c.tickGenerator = g;
                            c.tickFormatter = I.isFunction(d.tickFormatter) ? function (a, b) {
                                return "" + d.tickFormatter(a, b)
                            } : f;
                            f = c.options.ticks;
                            e = [];
                            null == f || "number" == typeof f && 0 < f ? e = c.tickGenerator(c) : f && (e = I.isFunction(f) ? f({
                                min: c.min,
                                max: c.max
                            }) : f);
                            c.ticks = [];
                            for (f = 0; f < e.length; ++f) m = null, k = e[f], "object" == typeof k ? (g = +k[0], 1 < k.length && (m = k[1])) : g = +k, null == m && (m = c.tickFormatter(g, c)), isNaN(g) || c.ticks.push({
                                v: g,
                                label: m
                            });
                            e = c.ticks;
                            c.options.autoscaleMargin && 0 < e.length && (null == c.options.min && (c.min = Math.min(c.min, e[0].v)), null == c.options.max && 1 < e.length && (c.max = Math.max(c.max, e[e.length - 1].v)));
                            f = function (b, d) {
                                return I('<div style="position:absolute;top:-10000px;' + d + 'font-size:smaller"><div class="' + c.direction + "Axis " + c.direction +
                                    c.n + 'Axis">' + b.join("") + "</div></div>").appendTo(a)
                            };
                            k = c.options;
                            g = c.ticks || [];
                            m = [];
                            var z;
                            e = k.labelWidth;
                            k = k.labelHeight;
                            if ("x" == c.direction) {
                                if (null == e && (e = Math.floor(ca / (0 < g.length ? g.length : 1))), null == k) {
                                    m = [];
                                    for (x = 0; x < g.length; ++x) (z = g[x].label) && m.push('<div class="tickLabel" style="float:left;width:' + e + 'px">' + z + "</div>");
                                    0 < m.length && (m.push('<div style="clear:left"></div>'), f = f(m, "width:10000px;"), k = f.height(), f.remove())
                                }
                            } else if (null == e || null == k) {
                                for (x = 0; x < g.length; ++x) (z = g[x].label) && m.push('<div class="tickLabel">' +
                                    z + "</div>");
                                0 < m.length && (f = f(m, ""), null == e && (e = f.children().width()), null == k && (k = f.find("div.tickLabel").height()), f.remove())
                            }
                            null == e && (e = 0);
                            null == k && (k = 0);
                            c.labelWidth = e;
                            c.labelHeight = k
                        });
                        for (b = allocatedAxes.length - 1; 0 <= b; --b) v(allocatedAxes[b]);
                        var d = u.grid.minBorderMargin;
                        if (null == d) for (b = d = 0; b < G.length; ++b) d = Math.max(d, G[b].points.radius + G[b].points.lineWidth / 2);
                        for (var e in N) N[e] += u.grid.borderWidth, N[e] = Math.max(d, N[e])
                    }
                    Va = ca - N.left - N.right;
                    ia = ea - N.bottom - N.top;
                    I.each(c, function (a, b) {
                        var c =
                            function (a) {
                                return a
                            }, d, e, f = b.options.transform || c, g = b.options.inverseTransform;
                        "x" == b.direction ? (d = b.scale = Va / Math.abs(f(b.max) - f(b.min)), e = Math.min(f(b.max), f(b.min))) : (d = b.scale = ia / Math.abs(f(b.max) - f(b.min)), d = -d, e = Math.max(f(b.max), f(b.min)));
                        b.p2c = f == c ? function (a) {
                            return (a - e) * d
                        } : function (a) {
                            return (f(a) - e) * d
                        };
                        b.c2p = g ? function (a) {
                            return g(e + a / d)
                        } : function (a) {
                            return e + a / d
                        }
                    });
                    if (u.grid.show) {
                        I.each(allocatedAxes, function (a, b) {
                            "x" == b.direction ? (b.box.left = N.left, b.box.width = Va) : (b.box.top = N.top,
                                b.box.height = ia)
                        });
                        a.find(".tickLabels").remove();
                        b = ['<div class="tickLabels" style="font-size:smaller">'];
                        c = m();
                        for (d = 0; d < c.length; ++d) {
                            e = c[d];
                            var f = e.box;
                            if (e.show) {
                                b.push('<div class="' + e.direction + "Axis " + e.direction + e.n + 'Axis" style="color:' + e.options.color + '">');
                                for (var g = 0; g < e.ticks.length; ++g) {
                                    var p = e.ticks[g];
                                    if (p.label && !(p.v < e.min || p.v > e.max)) {
                                        var y = {}, t;
                                        "x" == e.direction ? (t = "center", y.left = Math.round(N.left + e.p2c(p.v) - e.labelWidth / 2), "bottom" == e.position ? y.top = f.top + f.padding : y.bottom =
                                            ea - (f.top + f.height - f.padding)) : (y.top = Math.round(N.top + e.p2c(p.v) - e.labelHeight / 2), "left" == e.position ? (y.right = ca - (f.left + f.width - f.padding), t = "right") : (y.left = f.left + f.padding, t = "left"));
                                        y.width = e.labelWidth;
                                        t = ["position:absolute", "text-align:" + t];
                                        for (var w in y) t.push(w + ":" + y[w] + "px");
                                        b.push('<div class="tickLabel" style="' + t.join(";") + '">' + p.label + "</div>")
                                    }
                                }
                                b.push("</div>")
                            }
                        }
                        b.push("</div>");
                        a.append(b.join(""))
                    }
                    a.find(".legend").remove();
                    if (u.legend.show) {
                        w = [];
                        b = !1;
                        c = u.legend.labelFormatter;
                        for (f = 0; f < G.length; ++f) if (d = G[f], e = d.label) 0 == f % u.legend.noColumns && (b && w.push("</tr>"), w.push("<tr>"), b = !0), c && (e = c(e, d)), w.push('<td class="legendColorBox"><div style="border:1px solid ' + u.legend.labelBoxBorderColor + ';padding:1px"><div style="width:4px;height:0;border:5px solid ' + d.color + ';overflow:hidden"></div></div></td><td class="legendLabel">' + e + "</td>");
                        b && w.push("</tr>");
                        0 != w.length && (b = '<table style="font-size:smaller;color:' + u.grid.color + '">' + w.join("") + "</table>", null != u.legend.container ?
                            I(u.legend.container).html(b) : (w = "", c = u.legend.position, d = u.legend.margin, null == d[0] && (d = [d, d]), "n" == c.charAt(0) ? w += "top:" + (d[1] + N.top) + "px;" : "s" == c.charAt(0) && (w += "bottom:" + (d[1] + N.bottom) + "px;"), "e" == c.charAt(1) ? w += "right:" + (d[0] + N.right) + "px;" : "w" == c.charAt(1) && (w += "left:" + (d[0] + N.left) + "px;"), b = I('<div class="legend">' + b.replace('style="', 'style="position:absolute;' + w + ";") + "</div>").appendTo(a), 0 != u.legend.backgroundOpacity && (c = u.legend.backgroundColor, null == c && (c = (c = u.grid.backgroundColor) &&
                            "string" == typeof c ? I.color.parse(c) : I.color.extract(b, "background-color"), c.a = 1, c = c.toString()), d = b.children(), I('<div style="position:absolute;width:' + d.width() + "px;height:" + d.height() + "px;" + w + "background-color:" + c + ';"> </div>').prependTo(b).css("opacity", u.legend.backgroundOpacity))))
                    }
                }

                function ra() {
                    D.clearRect(0, 0, ca, ea);
                    var a = u.grid;
                    a.show && a.backgroundColor && (D.save(), D.translate(N.left, N.top), D.fillStyle = Nc(u.grid.backgroundColor, ia, 0, "rgba(255, 255, 255, 0)"), D.fillRect(0, 0, Va, ia), D.restore());
                    a.show && !a.aboveData && K();
                    for (var b = 0; b < G.length; ++b) {
                        e(Ja.drawSeries, [D, G[b]]);
                        var c = G[b];
                        c.lines.show && C(c);
                        c.bars.show && U(c);
                        c.points.show && L(c)
                    }
                    e(Ja.draw, [D]);
                    a.show && a.aboveData && K()
                }

                function F(a, b) {
                    var c, d, e, f, g = m();
                    for (i = 0; i < g.length; ++i) if (c = g[i], c.direction == b && (f = b + c.n + "axis", !a[f] && 1 == c.n && (f = b + "axis"), a[f])) {
                        d = a[f].from;
                        e = a[f].to;
                        break
                    }
                    a[f] || (c = "x" == b ? $[0] : da[0], d = a[b + "1"], e = a[b + "2"]);
                    null != d && (null != e && d > e) && (f = d, d = e, e = f);
                    return {from: d, to: e, axis: c}
                }

                function K() {
                    var a;
                    D.save();
                    D.translate(N.left,
                        N.top);
                    var b = u.grid.markings;
                    if (b) {
                        if (I.isFunction(b)) {
                            var c = la.getAxes();
                            c.xmin = c.xaxis.min;
                            c.xmax = c.xaxis.max;
                            c.ymin = c.yaxis.min;
                            c.ymax = c.yaxis.max;
                            b = b(c)
                        }
                        for (a = 0; a < b.length; ++a) {
                            var c = b[a], d = F(c, "x"), e = F(c, "y");
                            null == d.from && (d.from = d.axis.min);
                            null == d.to && (d.to = d.axis.max);
                            null == e.from && (e.from = e.axis.min);
                            null == e.to && (e.to = e.axis.max);
                            d.to < d.axis.min || (d.from > d.axis.max || e.to < e.axis.min || e.from > e.axis.max) || (d.from = Math.max(d.from, d.axis.min), d.to = Math.min(d.to, d.axis.max), e.from = Math.max(e.from,
                                e.axis.min), e.to = Math.min(e.to, e.axis.max), d.from == d.to && e.from == e.to || (d.from = d.axis.p2c(d.from), d.to = d.axis.p2c(d.to), e.from = e.axis.p2c(e.from), e.to = e.axis.p2c(e.to), d.from == d.to || e.from == e.to ? (D.beginPath(), D.strokeStyle = c.color || u.grid.markingsColor, D.lineWidth = c.lineWidth || u.grid.markingsLineWidth, D.moveTo(d.from, e.from), D.lineTo(d.to, e.to), D.stroke()) : (D.fillStyle = c.color || u.grid.markingsColor, D.fillRect(d.from, e.to, d.to - d.from, e.from - e.to))))
                        }
                    }
                    c = m();
                    b = u.grid.borderWidth;
                    for (d = 0; d < c.length; ++d) {
                        e =
                            c[d];
                        a = e.box;
                        var f = e.tickLength, g, n, p, y;
                        if (e.show && 0 != e.ticks.length) {
                            D.strokeStyle = e.options.tickColor || I.color.parse(e.options.color).scale("a", 0.22).toString();
                            D.lineWidth = 1;
                            "x" == e.direction ? (g = 0, n = "full" == f ? "top" == e.position ? 0 : ia : a.top - N.top + ("top" == e.position ? a.height : 0)) : (n = 0, g = "full" == f ? "left" == e.position ? 0 : Va : a.left - N.left + ("left" == e.position ? a.width : 0));
                            e.innermost || (D.beginPath(), p = y = 0, "x" == e.direction ? p = Va : y = ia, 1 == D.lineWidth && (g = Math.floor(g) + 0.5, n = Math.floor(n) + 0.5), D.moveTo(g, n), D.lineTo(g +
                                p, n + y), D.stroke());
                            D.beginPath();
                            for (a = 0; a < e.ticks.length; ++a) {
                                var w = e.ticks[a].v;
                                p = y = 0;
                                w < e.min || (w > e.max || "full" == f && 0 < b && (w == e.min || w == e.max)) || ("x" == e.direction ? (g = e.p2c(w), y = "full" == f ? -ia : f, "top" == e.position && (y = -y)) : (n = e.p2c(w), p = "full" == f ? -Va : f, "left" == e.position && (p = -p)), 1 == D.lineWidth && ("x" == e.direction ? g = Math.floor(g) + 0.5 : n = Math.floor(n) + 0.5), D.moveTo(g, n), D.lineTo(g + p, n + y))
                            }
                            D.stroke()
                        }
                    }
                    b && (D.lineWidth = b, D.strokeStyle = u.grid.borderColor, D.strokeRect(-b / 2, -b / 2, Va + b, ia + b));
                    D.restore()
                }

                function C(a) {
                    function b(a,
                               c, d, e, f) {
                        var g = a.points, a = a.pointsize, m = null, k = null;
                        D.beginPath();
                        for (var n = a; n < g.length; n += a) {
                            var p = g[n - a], r = g[n - a + 1], z = g[n], x = g[n + 1];
                            if (!(null == p || null == z)) {
                                if (r <= x && r < f.min) {
                                    if (x < f.min) continue;
                                    p = (f.min - r) / (x - r) * (z - p) + p;
                                    r = f.min
                                } else if (x <= r && x < f.min) {
                                    if (r < f.min) continue;
                                    z = (f.min - r) / (x - r) * (z - p) + p;
                                    x = f.min
                                }
                                if (r >= x && r > f.max) {
                                    if (x > f.max) continue;
                                    p = (f.max - r) / (x - r) * (z - p) + p;
                                    r = f.max
                                } else if (x >= r && x > f.max) {
                                    if (r > f.max) continue;
                                    z = (f.max - r) / (x - r) * (z - p) + p;
                                    x = f.max
                                }
                                if (p <= z && p < e.min) {
                                    if (z < e.min) continue;
                                    r = (e.min -
                                        p) / (z - p) * (x - r) + r;
                                    p = e.min
                                } else if (z <= p && z < e.min) {
                                    if (p < e.min) continue;
                                    x = (e.min - p) / (z - p) * (x - r) + r;
                                    z = e.min
                                }
                                if (p >= z && p > e.max) {
                                    if (z > e.max) continue;
                                    r = (e.max - p) / (z - p) * (x - r) + r;
                                    p = e.max
                                } else if (z >= p && z > e.max) {
                                    if (p > e.max) continue;
                                    x = (e.max - p) / (z - p) * (x - r) + r;
                                    z = e.max
                                }
                                (p != m || r != k) && D.moveTo(e.p2c(p) + c, f.p2c(r) + d);
                                m = z;
                                k = x;
                                D.lineTo(e.p2c(z) + c, f.p2c(x) + d)
                            }
                        }
                        D.stroke()
                    }

                    D.save();
                    D.translate(N.left, N.top);
                    D.lineJoin = "round";
                    var c = a.lines.lineWidth, d = a.shadowSize;
                    if (0 < c && 0 < d) {
                        D.lineWidth = d;
                        D.strokeStyle = "rgba(0,0,0,0.1)";
                        var e = Math.PI / 18;
                        b(a.datapoints, Math.sin(e) * (c / 2 + d / 2), Math.cos(e) * (c / 2 + d / 2), a.xaxis, a.yaxis);
                        D.lineWidth = d / 2;
                        b(a.datapoints, Math.sin(e) * (c / 2 + d / 4), Math.cos(e) * (c / 2 + d / 4), a.xaxis, a.yaxis)
                    }
                    D.lineWidth = c;
                    D.strokeStyle = a.color;
                    if (d = Q(a.lines, a.color, 0, ia)) {
                        D.fillStyle = d;
                        for (var f = a.datapoints, d = a.xaxis, e = a.yaxis, g = f.points, f = f.pointsize, m = Math.min(Math.max(0, e.min), e.max), n = 0, p = !1, y = 1, w = 0, t = 0; !(0 < f && n > g.length + f);) {
                            var n = n + f, u = g[n - f], A = g[n - f + y], q = g[n], v = g[n + y];
                            if (p) {
                                if (0 < f && null != u && null == q) {
                                    t = n;
                                    f = -f;
                                    y =
                                        2;
                                    continue
                                }
                                if (0 > f && n == w + f) {
                                    D.fill();
                                    p = !1;
                                    f = -f;
                                    y = 1;
                                    n = w = t + f;
                                    continue
                                }
                            }
                            if (!(null == u || null == q)) {
                                if (u <= q && u < d.min) {
                                    if (q < d.min) continue;
                                    A = (d.min - u) / (q - u) * (v - A) + A;
                                    u = d.min
                                } else if (q <= u && q < d.min) {
                                    if (u < d.min) continue;
                                    v = (d.min - u) / (q - u) * (v - A) + A;
                                    q = d.min
                                }
                                if (u >= q && u > d.max) {
                                    if (q > d.max) continue;
                                    A = (d.max - u) / (q - u) * (v - A) + A;
                                    u = d.max
                                } else if (q >= u && q > d.max) {
                                    if (u > d.max) continue;
                                    v = (d.max - u) / (q - u) * (v - A) + A;
                                    q = d.max
                                }
                                p || (D.beginPath(), D.moveTo(d.p2c(u), e.p2c(m)), p = !0);
                                if (A >= e.max && v >= e.max) D.lineTo(d.p2c(u), e.p2c(e.max)), D.lineTo(d.p2c(q),
                                    e.p2c(e.max)); else if (A <= e.min && v <= e.min) D.lineTo(d.p2c(u), e.p2c(e.min)), D.lineTo(d.p2c(q), e.p2c(e.min)); else {
                                    var G = u, B = q;
                                    A <= v && A < e.min && v >= e.min ? (u = (e.min - A) / (v - A) * (q - u) + u, A = e.min) : v <= A && (v < e.min && A >= e.min) && (q = (e.min - A) / (v - A) * (q - u) + u, v = e.min);
                                    A >= v && A > e.max && v <= e.max ? (u = (e.max - A) / (v - A) * (q - u) + u, A = e.max) : v >= A && (v > e.max && A <= e.max) && (q = (e.max - A) / (v - A) * (q - u) + u, v = e.max);
                                    u != G && D.lineTo(d.p2c(G), e.p2c(A));
                                    D.lineTo(d.p2c(u), e.p2c(A));
                                    D.lineTo(d.p2c(q), e.p2c(v));
                                    q != B && (D.lineTo(d.p2c(q), e.p2c(v)), D.lineTo(d.p2c(B),
                                        e.p2c(v)))
                                }
                            }
                        }
                    }
                    0 < c && b(a.datapoints, 0, 0, a.xaxis, a.yaxis);
                    D.restore()
                }

                function L(a) {
                    function b(a, c, d, e, f, g, m, k) {
                        for (var p = a.points, a = a.pointsize, n = 0; n < p.length; n += a) {
                            var r = p[n], z = p[n + 1];
                            null == r || (r < g.min || r > g.max || z < m.min || z > m.max) || (D.beginPath(), r = g.p2c(r), z = m.p2c(z) + e, "circle" == k ? D.arc(r, z, c, 0, f ? Math.PI : 2 * Math.PI, !1) : k(D, r, z, c, f), D.closePath(), d && (D.fillStyle = d, D.fill()), D.stroke())
                        }
                    }

                    D.save();
                    D.translate(N.left, N.top);
                    var c = a.points.lineWidth, d = a.shadowSize, e = a.points.radius, f = a.points.symbol;
                    0 < c &&
                    0 < d && (d /= 2, D.lineWidth = d, D.strokeStyle = "rgba(0,0,0,0.1)", b(a.datapoints, e, null, d + d / 2, !0, a.xaxis, a.yaxis, f), D.strokeStyle = "rgba(0,0,0,0.2)", b(a.datapoints, e, null, d / 2, !0, a.xaxis, a.yaxis, f));
                    D.lineWidth = c;
                    D.strokeStyle = a.color;
                    b(a.datapoints, e, Q(a.points, a.color), 0, !1, a.xaxis, a.yaxis, f);
                    D.restore()
                }

                function H(a, b, c, d, e, f, g, m, p, n, y, w) {
                    var u, q, t, v;
                    y ? (v = q = t = !0, u = !1, y = c, c = b + d, e = b + e, a < y && (b = a, a = y, y = b, u = !0, q = !1)) : (u = q = t = !0, v = !1, y = a + d, a += e, e = c, c = b, c < e && (b = c, c = e, e = b, v = !0, t = !1));
                    if (!(a < m.min || y > m.max || c < p.min ||
                        e > p.max)) if (y < m.min && (y = m.min, u = !1), a > m.max && (a = m.max, q = !1), e < p.min && (e = p.min, v = !1), c > p.max && (c = p.max, t = !1), y = m.p2c(y), e = p.p2c(e), a = m.p2c(a), c = p.p2c(c), g && (n.beginPath(), n.moveTo(y, e), n.lineTo(y, c), n.lineTo(a, c), n.lineTo(a, e), n.fillStyle = g(e, c), n.fill()), 0 < w && (u || q || t || v)) n.beginPath(), n.moveTo(y, e + f), u ? n.lineTo(y, c + f) : n.moveTo(y, c + f), t ? n.lineTo(a, c + f) : n.moveTo(a, c + f), q ? n.lineTo(a, e + f) : n.moveTo(a, e + f), v ? n.lineTo(y, e + f) : n.moveTo(y, e + f), n.stroke()
                }

                function U(a) {
                    D.save();
                    D.translate(N.left, N.top);
                    D.lineWidth =
                        a.bars.lineWidth;
                    D.strokeStyle = a.color;
                    for (var b = "left" == a.bars.align ? 0 : -a.bars.barWidth / 2, c = a.datapoints, d = b + a.bars.barWidth, e = a.bars.fill ? function (b, c) {
                        return Q(a.bars, a.color, b, c)
                    } : null, f = a.xaxis, g = a.yaxis, m = c.points, c = c.pointsize, n = 0; n < m.length; n += c) null != m[n] && H(m[n], m[n + 1], m[n + 2], b, d, 0, e, f, g, D, a.bars.horizontal, a.bars.lineWidth);
                    D.restore()
                }

                function Q(a, b, c, d) {
                    var e = a.fill;
                    if (!e) return null;
                    if (a.fillColor) return Nc(a.fillColor, c, d, b);
                    a = I.color.parse(b);
                    a.a = "number" == typeof e ? e : 0.4;
                    a.normalize();
                    return a.toString()
                }

                function R(a) {
                    u.grid.hoverable && S("plothover", a, function (a) {
                        return !1 != a.hoverable
                    })
                }

                function Mc(a) {
                    u.grid.hoverable && S("plothover", a, function () {
                        return !1
                    })
                }

                function Lc(a) {
                    S("plotclick", a, function (a) {
                        return !1 != a.clickable
                    })
                }

                function S(b, c, d) {
                    var e = Ia.offset(), f = c.pageX - e.left - N.left, g = c.pageY - e.top - N.top,
                        m = p({left: f, top: g});
                    m.pageX = c.pageX;
                    m.pageY = c.pageY;
                    var c = u.grid.mouseActiveRadius, y = c * c + 1, w = null, q, t;
                    for (q = G.length - 1; 0 <= q; --q) if (d(G[q])) {
                        var v = G[q], D = v.xaxis, B = v.yaxis, A = v.datapoints.points,
                            ra = v.datapoints.pointsize, J = D.c2p(f), F = B.c2p(g), M = c / D.scale, K = c / B.scale;
                        D.options.inverseTransform && (M = Number.MAX_VALUE);
                        B.options.inverseTransform && (K = Number.MAX_VALUE);
                        if (v.lines.show || v.points.show) for (t = 0; t < A.length; t += ra) {
                            var I = A[t], C = A[t + 1];
                            if (null != I && !(I - J > M || I - J < -M || C - F > K || C - F < -K)) I = Math.abs(D.p2c(I) - f), C = Math.abs(B.p2c(C) - g), C = I * I + C * C, C < y && (y = C, w = [q, t / ra])
                        }
                        if (v.bars.show && !w) {
                            D = "left" == v.bars.align ? 0 : -v.bars.barWidth / 2;
                            v = D + v.bars.barWidth;
                            for (t = 0; t < A.length; t += ra) if (I = A[t], C = A[t + 1], B = A[t +
                            2], null != I && (G[q].bars.horizontal ? J <= Math.max(B, I) && J >= Math.min(B, I) && F >= C + D && F <= C + v : J >= I + D && J <= I + v && F >= Math.min(B, C) && F <= Math.max(B, C))) w = [q, t / ra]
                        }
                    }
                    w ? (q = w[0], t = w[1], ra = G[q].datapoints.pointsize, d = {
                        datapoint: G[q].datapoints.points.slice(t * ra, (t + 1) * ra),
                        dataIndex: t,
                        series: G[q],
                        seriesIndex: q
                    }) : d = null;
                    d && (d.pageX = parseInt(d.series.xaxis.p2c(d.datapoint[0]) + e.left + N.left), d.pageY = parseInt(d.series.yaxis.p2c(d.datapoint[1]) + e.top + N.top));
                    if (u.grid.autoHighlight) {
                        for (e = 0; e < oa.length; ++e) f = oa[e], f.auto ==
                        b && (!d || !(f.series == d.series && f.point[0] == d.datapoint[0] && f.point[1] == d.datapoint[1])) && aa(f.series, f.point);
                        d && Y(d.series, d.datapoint, b)
                    }
                    a.trigger(b, [m, d])
                }

                function T() {
                    Ib || (Ib = setTimeout(W, 30))
                }

                function W() {
                    Ib = null;
                    X.save();
                    X.clearRect(0, 0, ca, ea);
                    X.translate(N.left, N.top);
                    var a, b;
                    for (a = 0; a < oa.length; ++a) if (b = oa[a], b.series.bars.show) Zb(b.series, b.point); else {
                        var c = b.series, d = b.point;
                        b = d[0];
                        var d = d[1], f = c.xaxis, g = c.yaxis;
                        if (!(b < f.min || b > f.max || d < g.min || d > g.max)) {
                            var m = c.points.radius + c.points.lineWidth /
                                2;
                            X.lineWidth = m;
                            X.strokeStyle = I.color.parse(c.color).scale("a", 0.5).toString();
                            m *= 1.5;
                            b = f.p2c(b);
                            d = g.p2c(d);
                            X.beginPath();
                            "circle" == c.points.symbol ? X.arc(b, d, m, 0, 2 * Math.PI, !1) : c.points.symbol(X, b, d, m, !1);
                            X.closePath();
                            X.stroke()
                        }
                    }
                    X.restore();
                    e(Ja.drawOverlay, [X])
                }

                function Y(a, b, c) {
                    "number" == typeof a && (a = G[a]);
                    if ("number" == typeof b) var d = a.datapoints.pointsize,
                        b = a.datapoints.points.slice(d * b, d * (b + 1));
                    d = ba(a, b);
                    -1 == d ? (oa.push({series: a, point: b, auto: c}), T()) : c || (oa[d].auto = !1)
                }

                function aa(a, b) {
                    null ==
                    a && null == b && (oa = [], T());
                    "number" == typeof a && (a = G[a]);
                    "number" == typeof b && (b = a.data[b]);
                    var c = ba(a, b);
                    -1 != c && (oa.splice(c, 1), T())
                }

                function ba(a, b) {
                    for (var c = 0; c < oa.length; ++c) {
                        var d = oa[c];
                        if (d.series == a && d.point[0] == b[0] && d.point[1] == b[1]) return c
                    }
                    return -1
                }

                function Zb(a, b) {
                    X.lineWidth = a.bars.lineWidth;
                    X.strokeStyle = I.color.parse(a.color).scale("a", 0.5).toString();
                    var c = I.color.parse(a.color).scale("a", 0.5).toString(),
                        d = "left" == a.bars.align ? 0 : -a.bars.barWidth / 2;
                    H(b[0], b[1], b[2] || 0, d, d + a.bars.barWidth,
                        0, function () {
                            return c
                        }, a.xaxis, a.yaxis, X, a.bars.horizontal, a.bars.lineWidth)
                }

                function Nc(a, b, c, d) {
                    if ("string" == typeof a) return a;
                    for (var b = D.createLinearGradient(0, c, 0, b), c = 0, e = a.colors.length; c < e; ++c) {
                        var f = a.colors[c];
                        if ("string" != typeof f) {
                            var g = I.color.parse(d);
                            null != f.brightness && (g = g.scale("rgb", f.brightness));
                            null != f.opacity && (g.a *= f.opacity);
                            f = g.toString()
                        }
                        b.addColorStop(c / (e - 1), f)
                    }
                    return b
                }

                var G = [], u = {
                        colors: ["#edc240", "#afd8f8", "#cb4b4b", "#4da74d", "#9440ed"],
                        legend: {
                            show: !0,
                            noColumns: 1,
                            labelFormatter: null,
                            labelBoxBorderColor: "#ccc",
                            container: null,
                            position: "ne",
                            margin: 5,
                            backgroundColor: null,
                            backgroundOpacity: 0.85
                        },
                        xaxis: {
                            show: null,
                            position: "bottom",
                            mode: null,
                            color: null,
                            tickColor: null,
                            transform: null,
                            inverseTransform: null,
                            min: null,
                            max: null,
                            autoscaleMargin: null,
                            ticks: null,
                            tickFormatter: null,
                            labelWidth: null,
                            labelHeight: null,
                            reserveSpace: null,
                            tickLength: null,
                            alignTicksWithAxis: null,
                            tickDecimals: null,
                            tickSize: null,
                            minTickSize: null,
                            monthNames: null,
                            timeformat: null,
                            twelveHourClock: !1
                        },
                        yaxis: {
                            autoscaleMargin: 0.02,
                            position: "left"
                        },
                        xaxes: [],
                        yaxes: [],
                        series: {
                            points: {
                                show: !1,
                                radius: 3,
                                lineWidth: 2,
                                fill: !0,
                                fillColor: "#ffffff",
                                symbol: "circle"
                            },
                            lines: {lineWidth: 2, fill: !1, fillColor: null, steps: !1},
                            bars: {
                                show: !1,
                                lineWidth: 2,
                                barWidth: 1,
                                fill: !0,
                                fillColor: null,
                                align: "left",
                                horizontal: !1
                            },
                            shadowSize: 3
                        },
                        grid: {
                            show: !0,
                            aboveData: !1,
                            color: "#545454",
                            backgroundColor: null,
                            borderColor: null,
                            tickColor: null,
                            labelMargin: 5,
                            axisMargin: 8,
                            borderWidth: 2,
                            minBorderMargin: null,
                            markings: null,
                            markingsColor: "#f4f4f4",
                            markingsLineWidth: 2,
                            clickable: !1,
                            hoverable: !1,
                            autoHighlight: !0,
                            mouseActiveRadius: 10
                        },
                        hooks: {}
                    }, fa = null, ha = null, Ia = null, D = null, X = null, $ = [], da = [],
                    N = {left: 0, right: 0, top: 0, bottom: 0}, ca = 0, ea = 0, Va = 0, ia = 0, Ja = {
                        processOptions: [],
                        processRawData: [],
                        processDatapoints: [],
                        drawSeries: [],
                        draw: [],
                        bindEvents: [],
                        drawOverlay: [],
                        shutdown: []
                    }, la = this;
                la.setData = f;
                la.setupGrid = B;
                la.draw = ra;
                la.getPlaceholder = function () {
                    return a
                };
                la.getCanvas = function () {
                    return fa
                };
                la.getPlotOffset = function () {
                    return N
                };
                la.width = function () {
                    return Va
                };
                la.height = function () {
                    return ia
                };
                la.offset = function () {
                    var a = Ia.offset();
                    a.left += N.left;
                    a.top += N.top;
                    return a
                };
                la.getData = function () {
                    return G
                };
                la.getAxes = function () {
                    var a = {};
                    I.each($.concat(da), function (b, c) {
                        c && (a[c.direction + (1 != c.n ? c.n : "") + "axis"] = c)
                    });
                    return a
                };
                la.getXAxes = function () {
                    return $
                };
                la.getYAxes = function () {
                    return da
                };
                la.c2p = p;
                la.p2c = function (a) {
                    var b = {}, c, d, e;
                    for (c = 0; c < $.length; ++c) if ((d = $[c]) && d.used) if (e = "x" + d.n, null == a[e] && 1 == d.n && (e = "x"), null != a[e]) {
                        b.left = d.p2c(a[e]);
                        break
                    }
                    for (c = 0; c < da.length; ++c) if ((d = da[c]) && d.used) if (e =
                        "y" + d.n, null == a[e] && 1 == d.n && (e = "y"), null != a[e]) {
                        b.top = d.p2c(a[e]);
                        break
                    }
                    return b
                };
                la.getOptions = function () {
                    return u
                };
                la.highlight = Y;
                la.unhighlight = aa;
                la.triggerRedrawOverlay = T;
                la.pointOffset = function (a) {
                    return {
                        left: parseInt($[g(a, "x") - 1].p2c(+a.x) + N.left),
                        top: parseInt(da[g(a, "y") - 1].p2c(+a.y) + N.top)
                    }
                };
                la.shutdown = function () {
                    Ib && clearTimeout(Ib);
                    Ia.unbind("mousemove", R);
                    Ia.unbind("mouseleave", Mc);
                    Ia.unbind("click", Lc);
                    e(Ja.shutdown, [Ia])
                };
                la.resize = function () {
                    t();
                    q(fa);
                    q(ha)
                };
                la.hooks = Ja;
                for (var qa =
                    0; qa < d.length; ++qa) {
                    var ta = d[qa];
                    ta.init(la);
                    ta.options && I.extend(!0, u, ta.options)
                }
                I.extend(!0, u, c);
                null == u.xaxis.color && (u.xaxis.color = u.grid.color);
                null == u.yaxis.color && (u.yaxis.color = u.grid.color);
                null == u.xaxis.tickColor && (u.xaxis.tickColor = u.grid.tickColor);
                null == u.yaxis.tickColor && (u.yaxis.tickColor = u.grid.tickColor);
                null == u.grid.borderColor && (u.grid.borderColor = u.grid.color);
                null == u.grid.tickColor && (u.grid.tickColor = I.color.parse(u.grid.color).scale("a", 0.22).toString());
                for (c = 0; c < Math.max(1,
                    u.xaxes.length); ++c) u.xaxes[c] = I.extend(!0, {}, u.xaxis, u.xaxes[c]);
                for (c = 0; c < Math.max(1, u.yaxes.length); ++c) u.yaxes[c] = I.extend(!0, {}, u.yaxis, u.yaxes[c]);
                u.xaxis.noTicks && null == u.xaxis.ticks && (u.xaxis.ticks = u.xaxis.noTicks);
                u.yaxis.noTicks && null == u.yaxis.ticks && (u.yaxis.ticks = u.yaxis.noTicks);
                u.x2axis && (u.xaxes[1] = I.extend(!0, {}, u.xaxis, u.x2axis), u.xaxes[1].position = "top");
                u.y2axis && (u.yaxes[1] = I.extend(!0, {}, u.yaxis, u.y2axis), u.yaxes[1].position = "right");
                u.grid.coloredAreas && (u.grid.markings = u.grid.coloredAreas);
                u.grid.coloredAreasColor && (u.grid.markingsColor = u.grid.coloredAreasColor);
                u.lines && I.extend(!0, u.series.lines, u.lines);
                u.points && I.extend(!0, u.series.points, u.points);
                u.bars && I.extend(!0, u.series.bars, u.bars);
                null != u.shadowSize && (u.series.shadowSize = u.shadowSize);
                for (c = 0; c < u.xaxes.length; ++c) y($, c + 1).options = u.xaxes[c];
                for (c = 0; c < u.yaxes.length; ++c) y(da, c + 1).options = u.yaxes[c];
                for (var na in Ja) u.hooks[na] && u.hooks[na].length && (Ja[na] = Ja[na].concat(u.hooks[na]));
                e(Ja.processOptions, [u]);
                na = a.children("canvas.base");
                c = a.children("canvas.overlay");
                0 == na.length || 0 == c ? (a.html(""), a.css({padding: 0}), "static" == a.css("position") && a.css("position", "relative"), t(), fa = w(!0, "base"), ha = w(!1, "overlay"), na = !1) : (fa = na.get(0), ha = c.get(0), na = !0);
                D = fa.getContext("2d");
                X = ha.getContext("2d");
                Ia = I([ha, fa]);
                na && (a.data("plot").shutdown(), la.resize(), X.clearRect(0, 0, ca, ea), Ia.unbind(), a.children().not([fa, ha]).remove());
                a.data("plot", la);
                f(b);
                B();
                ra();
                u.grid.hoverable && (Ia.mousemove(R), Ia.mouseleave(Mc));
                u.grid.clickable && Ia.click(Lc);
                e(Ja.bindEvents, [Ia]);
                var oa = [], Ib = null
            }, ua = function (a, b) {
                return b * Math.floor(a / b)
            };
            I.plot = function (a, b, c) {
                return new oa(I(a), b, c, I.plot.plugins)
            };
            I.plot.version = "0.7";
            I.plot.plugins = [];
            I.plot.formatDate = function (a, b, c) {
                var d = function (a) {
                    a = "" + a;
                    return 1 == a.length ? "0" + a : a
                }, e = [], f = !1, g = !1, m = a.getUTCHours(), p = 12 > m;
                null == c && (c = "Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov Dec".split(" "));
                -1 != b.search(/%p|%P/) && (12 < m ? m -= 12 : 0 == m && (m = 12));
                for (var y = 0; y < b.length; ++y) {
                    var w = b.charAt(y);
                    if (f) {
                        switch (w) {
                            case "h":
                                w =
                                    "" + m;
                                break;
                            case "H":
                                w = d(m);
                                break;
                            case "M":
                                w = d(a.getUTCMinutes());
                                break;
                            case "S":
                                w = d(a.getUTCSeconds());
                                break;
                            case "d":
                                w = "" + a.getUTCDate();
                                break;
                            case "m":
                                w = "" + (a.getUTCMonth() + 1);
                                break;
                            case "y":
                                w = "" + a.getUTCFullYear();
                                break;
                            case "b":
                                w = "" + c[a.getUTCMonth()];
                                break;
                            case "p":
                                w = p ? "am" : "pm";
                                break;
                            case "P":
                                w = p ? "AM" : "PM";
                                break;
                            case "0":
                                w = "", g = !0
                        }
                        w && g && (w = d(w), g = !1);
                        e.push(w);
                        g || (f = !1)
                    } else "%" == w ? f = !0 : e.push(w)
                }
                return e.join("")
            };
            return a.plot || Ua.plot
        };
        var na;
        na || (na = {});
        (function () {
            function a(a) {
                return 10 >
                a ? "0" + a : a
            }

            function b(a) {
                e.lastIndex = 0;
                return e.test(a) ? '"' + a.replace(e, function (a) {
                    var b = y[a];
                    return "string" === typeof b ? b : "\\u" + ("0000" + a.charCodeAt(0).toString(16)).slice(-4)
                }) + '"' : '"' + a + '"'
            }

            function c(a, d) {
                var e, y, q, B, F = g, C, H = d[a];
                H && ("object" === typeof H && "function" === typeof H.toJSON) && (H = H.toJSON(a));
                "function" === typeof w && (H = w.call(d, a, H));
                switch (typeof H) {
                    case "string":
                        return b(H);
                    case "number":
                        return isFinite(H) ? String(H) : "null";
                    case "boolean":
                    case "null":
                        return String(H);
                    case "object":
                        if (!H) return "null";
                        g += p;
                        C = [];
                        if ("[object Array]" === Object.prototype.toString.apply(H)) {
                            B = H.length;
                            for (e = 0; e < B; e += 1) C[e] = c(e, H) || "null";
                            q = 0 === C.length ? "[]" : g ? "[\n" + g + C.join(",\n" + g) + "\n" + F + "]" : "[" + C.join(",") + "]";
                            g = F;
                            return q
                        }
                        if (w && "object" === typeof w) {
                            B = w.length;
                            for (e = 0; e < B; e += 1) "string" === typeof w[e] && (y = w[e], (q = c(y, H)) && C.push(b(y) + (g ? ": " : ":") + q))
                        } else for (y in H) Object.prototype.hasOwnProperty.call(H, y) && (q = c(y, H)) && C.push(b(y) + (g ? ": " : ":") + q);
                        q = 0 === C.length ? "{}" : g ? "{\n" + g + C.join(",\n" + g) + "\n" + F + "}" : "{" + C.join(",") +
                            "}";
                        g = F;
                        return q
                }
            }

            "function" !== typeof Date.prototype.toJSON && (Date.prototype.toJSON = function () {
                return isFinite(this.valueOf()) ? this.getUTCFullYear() + "-" + a(this.getUTCMonth() + 1) + "-" + a(this.getUTCDate()) + "T" + a(this.getUTCHours()) + ":" + a(this.getUTCMinutes()) + ":" + a(this.getUTCSeconds()) + "Z" : null
            }, String.prototype.toJSON = Number.prototype.toJSON = Boolean.prototype.toJSON = function () {
                return this.valueOf()
            });
            var d = /[\u0000\u00ad\u0600-\u0604\u070f\u17b4\u17b5\u200c-\u200f\u2028-\u202f\u2060-\u206f\ufeff\ufff0-\uffff]/g,
                e = /[\\\"\x00-\x1f\x7f-\x9f\u00ad\u0600-\u0604\u070f\u17b4\u17b5\u200c-\u200f\u2028-\u202f\u2060-\u206f\ufeff\ufff0-\uffff]/g,
                g, p, y = {"\b": "\\b", "\t": "\\t", "\n": "\\n", "\f": "\\f", "\r": "\\r", '"': '\\"', "\\": "\\\\"},
                w;
            "function" !== typeof na.stringify && (na.stringify = function (a, b, d) {
                var e;
                p = g = "";
                if ("number" === typeof d) for (e = 0; e < d; e += 1) p += " "; else "string" === typeof d && (p = d);
                if ((w = b) && "function" !== typeof b && ("object" !== typeof b || "number" !== typeof b.length)) throw Error("JSON.stringify");
                return c("", {"": a})
            });
            "function" !== typeof na.parse && (na.parse = function (a, b) {
                function c(a, d) {
                    var e, g, m = a[d];
                    if (m && "object" === typeof m) for (e in m) Object.prototype.hasOwnProperty.call(m, e) && (g = c(m, e), g !== sa ? m[e] = g : delete m[e]);
                    return b.call(a, d, m)
                }

                var e, a = String(a);
                d.lastIndex = 0;
                d.test(a) && (a = a.replace(d, function (a) {
                    return "\\u" + ("0000" + a.charCodeAt(0).toString(16)).slice(-4)
                }));
                if (/^[\],:{}\s]*$/.test(a.replace(/\\(?:["\\\/bfnrt]|u[0-9a-fA-F]{4})/g, "@").replace(/"[^"\\\n\r]*"|true|false|null|-?\d+(?:\.\d*)?(?:[eE][+\-]?\d+)?/g,
                    "]").replace(/(?:^|:|,)(?:\s*\[)+/g, ""))) return e = eval("(" + a + ")"), "function" === typeof b ? c({"": e}, "") : e;
                throw new SyntaxError("JSON.parse");
            })
        })();
        U || (U = {});
        var Ab = U;
        Ab.encode = function (a) {
            this.char2unicode_table = a;
            this.unicode2char_table = void 0
        };
        Ab.encode.prototype = {
            getUnicode: function (a) {
                return this.binarySearch(a, this.char2unicode_table)
            }, getCodepoint: function (a) {
                this.unicode2char_table || this.buildUnicodeTable();
                return this.binarySearch(a, this.unicode2char_table)
            }, binarySearch: function (a, b) {
                for (var c =
                    0, d = b.length - 1, e = null; c <= d;) {
                    var g = Math.floor((c + d) / 2);
                    if (a < b[g][0]) d = g - 1; else if (a > b[g][0]) c = g + 1; else {
                        e = g;
                        break
                    }
                }
                null === e && 0 <= d && (e = a < b[d][0] ? c : d);
                if (null != e) {
                    c = b[e];
                    if (2 == c.length) return c[0] == a ? c[1] : null;
                    if (a >= c[0] && a <= c[1]) return c[2] + (a - c[0])
                }
                return null
            }, buildUnicodeTable: function () {
                for (var a = [], b = this.char2unicode_table, c = b.length, d = 0; d < c; d++) {
                    var e = b[d];
                    2 == e.length ? a.push([e[1], e[0]]) : a.push([e[2], e[2] + (e[1] - e[0]), e[0]])
                }
                a.sort(function (a, b) {
                    return a[0] - b[0]
                });
                this.unicode2char_table = a
            }
        };
        Ab.encode.gb2312 = {
            _encoding: void 0,
            getEncoding: function () {
                "undefined" == typeof this._encoding && (this._encoding = new Ab.encode(this.table));
                return this._encoding
            },
            encode: function (a) {
                for (var b = [], c = a.length, d = 0; d < c; d++) {
                    var e = a.charCodeAt(d);
                    if (128 < e) {
                        if (e = this.getEncoding().getCodepoint(e)) b.push("%" + (15 < (e >> 8) + 128 ? "" : "0") + ((e >> 8) + 128).toString(16).toUpperCase()), b.push("%" + (15 < (e & 255) + 128 ? "" : "0") + ((e & 255) + 128).toString(16).toUpperCase())
                    } else b.push(encodeURI(a.charAt(d)))
                }
                return b.join("")
            },
            decode: function (a) {
                if ("string" !=
                    typeof a) return "";
                for (var b = [], a = unescape(a), c = a.length, d = 0; d < c;) {
                    var e = a.charCodeAt(d);
                    if (128 <= e) {
                        d++;
                        var g = a.charCodeAt(d), e = (e - 128 << 8) + (g - 128);
                        (e = this.getEncoding().getUnicode(e)) ? b.push(String.fromCharCode(e)) : b.push("?")
                    } else b.push(a.charAt(d));
                    d++
                }
                return b.join("")
            },
            table: [[8481, 8483, 12288], [8484, 12539], [8485, 713], [8486, 711], [8487, 168], [8488, 12291], [8489, 12293], [8490, 8213], [8491, 65374], [8492, 8214], [8493, 8230], [8494, 8495, 8216], [8496, 8497, 8220], [8498, 8499, 12308], [8500, 8507, 12296], [8508, 8509,
                12310], [8510, 8511, 12304], [8512, 177], [8513, 215], [8514, 247], [8515, 8758], [8516, 8517, 8743], [8518, 8721], [8519, 8719], [8520, 8746], [8521, 8745], [8522, 8712], [8523, 8759], [8524, 8730], [8525, 8869], [8526, 8741], [8527, 8736], [8528, 8978], [8529, 8857], [8530, 8747], [8531, 8750], [8532, 8801], [8533, 8780], [8534, 8776], [8535, 8765], [8536, 8733], [8537, 8800], [8538, 8539, 8814], [8540, 8541, 8804], [8542, 8734], [8543, 8757], [8544, 8756], [8545, 9794], [8546, 9792], [8547, 176], [8548, 8549, 8242], [8550, 8451], [8551, 65284], [8552, 164], [8553, 8554, 65504],
                [8555, 8240], [8556, 167], [8557, 8470], [8558, 9734], [8559, 9733], [8560, 9675], [8561, 9679], [8562, 9678], [8563, 9671], [8564, 9670], [8565, 9633], [8566, 9632], [8567, 9651], [8568, 9650], [8569, 8251], [8570, 8594], [8571, 8572, 8592], [8573, 8595], [8574, 12307], [8753, 8772, 9352], [8773, 8792, 9332], [8793, 8802, 9312], [8805, 8814, 12832], [8817, 8828, 8544], [8993, 8995, 65281], [8996, 65509], [8997, 9085, 65285], [9086, 65507], [9249, 9331, 12353], [9505, 9590, 12449], [9761, 9777, 913], [9778, 9784, 931], [9793, 9809, 945], [9810, 9816, 963], [10017, 10022, 1040], [10023,
                    1025], [10024, 10049, 1046], [10065, 10070, 1072], [10071, 1105], [10072, 10097, 1078], [10273, 257], [10274, 225], [10275, 462], [10276, 224], [10277, 275], [10278, 233], [10279, 283], [10280, 232], [10281, 299], [10282, 237], [10283, 464], [10284, 236], [10285, 333], [10286, 243], [10287, 466], [10288, 242], [10289, 363], [10290, 250], [10291, 468], [10292, 249], [10293, 470], [10294, 472], [10295, 474], [10296, 476], [10297, 252], [10298, 234], [10309, 10345, 12549], [10532, 10607, 9472], [12321, 21834], [12322, 38463], [12323, 22467], [12324, 25384], [12325, 21710], [12326,
                    21769], [12327, 21696], [12328, 30353], [12329, 30284], [12330, 34108], [12331, 30702], [12332, 33406], [12333, 30861], [12334, 29233], [12335, 38552], [12336, 38797], [12337, 27688], [12338, 23433], [12339, 20474], [12340, 25353], [12341, 26263], [12342, 23736], [12343, 33018], [12344, 26696], [12345, 32942], [12346, 26114], [12347, 30414], [12348, 20985], [12349, 25942], [12350, 29100], [12351, 32753], [12352, 34948], [12353, 20658], [12354, 22885], [12355, 25034], [12356, 28595], [12357, 33453], [12358, 25420], [12359, 25170], [12360, 21485], [12361, 21543], [12362,
                    31494], [12363, 20843], [12364, 30116], [12365, 24052], [12366, 25300], [12367, 36299], [12368, 38774], [12369, 25226], [12370, 32793], [12371, 22365], [12372, 38712], [12373, 32610], [12374, 29240], [12375, 30333], [12376, 26575], [12377, 30334], [12378, 25670], [12379, 20336], [12380, 36133], [12381, 25308], [12382, 31255], [12383, 26001], [12384, 29677], [12385, 25644], [12386, 25203], [12387, 33324], [12388, 39041], [12389, 26495], [12390, 29256], [12391, 25198], [12392, 25292], [12393, 20276], [12394, 29923], [12395, 21322], [12396, 21150], [12397, 32458], [12398,
                    37030], [12399, 24110], [12400, 26758], [12401, 27036], [12402, 33152], [12403, 32465], [12404, 26834], [12405, 30917], [12406, 34444], [12407, 38225], [12408, 20621], [12409, 35876], [12410, 33502], [12411, 32990], [12412, 21253], [12413, 35090], [12414, 21093], [12577, 34180], [12578, 38649], [12579, 20445], [12580, 22561], [12581, 39281], [12582, 23453], [12583, 25265], [12584, 25253], [12585, 26292], [12586, 35961], [12587, 40077], [12588, 29190], [12589, 26479], [12590, 30865], [12591, 24754], [12592, 21329], [12593, 21271], [12594, 36744], [12595, 32972], [12596,
                    36125], [12597, 38049], [12598, 20493], [12599, 29384], [12600, 22791], [12601, 24811], [12602, 28953], [12603, 34987], [12604, 22868], [12605, 33519], [12606, 26412], [12607, 31528], [12608, 23849], [12609, 32503], [12610, 29997], [12611, 27893], [12612, 36454], [12613, 36856], [12614, 36924], [12615, 40763], [12616, 27604], [12617, 37145], [12618, 31508], [12619, 24444], [12620, 30887], [12621, 34006], [12622, 34109], [12623, 27605], [12624, 27609], [12625, 27606], [12626, 24065], [12627, 24199], [12628, 30201], [12629, 38381], [12630, 25949], [12631, 24330], [12632,
                    24517], [12633, 36767], [12634, 22721], [12635, 33218], [12636, 36991], [12637, 38491], [12638, 38829], [12639, 36793], [12640, 32534], [12641, 36140], [12642, 25153], [12643, 20415], [12644, 21464], [12645, 21342], [12646, 12647, 36776], [12648, 36779], [12649, 36941], [12650, 26631], [12651, 24426], [12652, 33176], [12653, 34920], [12654, 40150], [12655, 24971], [12656, 21035], [12657, 30250], [12658, 24428], [12659, 25996], [12660, 28626], [12661, 28392], [12662, 23486], [12663, 25672], [12664, 20853], [12665, 20912], [12666, 26564], [12667, 19993], [12668, 31177],
                [12669, 39292], [12670, 28851], [12833, 30149], [12834, 24182], [12835, 29627], [12836, 33760], [12837, 25773], [12838, 25320], [12839, 38069], [12840, 27874], [12841, 21338], [12842, 21187], [12843, 25615], [12844, 38082], [12845, 31636], [12846, 20271], [12847, 24091], [12848, 33334], [12849, 33046], [12850, 33162], [12851, 28196], [12852, 27850], [12853, 39539], [12854, 25429], [12855, 21340], [12856, 21754], [12857, 34917], [12858, 22496], [12859, 19981], [12860, 24067], [12861, 27493], [12862, 31807], [12863, 37096], [12864, 24598], [12865, 25830], [12866, 29468],
                [12867, 35009], [12868, 26448], [12869, 25165], [12870, 36130], [12871, 30572], [12872, 36393], [12873, 37319], [12874, 24425], [12875, 33756], [12876, 34081], [12877, 39184], [12878, 21442], [12879, 34453], [12880, 27531], [12881, 24813], [12882, 24808], [12883, 28799], [12884, 33485], [12885, 33329], [12886, 20179], [12887, 27815], [12888, 34255], [12889, 25805], [12890, 31961], [12891, 27133], [12892, 26361], [12893, 33609], [12894, 21397], [12895, 31574], [12896, 20391], [12897, 20876], [12898, 27979], [12899, 23618], [12900, 36461], [12901, 25554], [12902, 21449],
                [12903, 33580], [12904, 33590], [12905, 26597], [12906, 30900], [12907, 25661], [12908, 23519], [12909, 23700], [12910, 24046], [12911, 35815], [12912, 25286], [12913, 26612], [12914, 35962], [12915, 25600], [12916, 25530], [12917, 34633], [12918, 39307], [12919, 35863], [12920, 32544], [12921, 38130], [12922, 20135], [12923, 38416], [12924, 39076], [12925, 26124], [12926, 29462], [13089, 22330], [13090, 23581], [13091, 24120], [13092, 38271], [13093, 20607], [13094, 32928], [13095, 21378], [13096, 25950], [13097, 30021], [13098, 21809], [13099, 20513], [13100, 36229],
                [13101, 25220], [13102, 38046], [13103, 26397], [13104, 22066], [13105, 28526], [13106, 24034], [13107, 21557], [13108, 28818], [13109, 36710], [13110, 25199], [13111, 25764], [13112, 25507], [13113, 24443], [13114, 28552], [13115, 37108], [13116, 33251], [13117, 36784], [13118, 23576], [13119, 26216], [13120, 24561], [13121, 27785], [13122, 38472], [13123, 36225], [13124, 34924], [13125, 25745], [13126, 31216], [13127, 22478], [13128, 27225], [13129, 25104], [13130, 21576], [13131, 20056], [13132, 31243], [13133, 24809], [13134, 28548], [13135, 35802], [13136, 25215],
                [13137, 36894], [13138, 39563], [13139, 31204], [13140, 21507], [13141, 30196], [13142, 25345], [13143, 21273], [13144, 27744], [13145, 36831], [13146, 24347], [13147, 39536], [13148, 32827], [13149, 40831], [13150, 20360], [13151, 23610], [13152, 36196], [13153, 32709], [13154, 26021], [13155, 28861], [13156, 20805], [13157, 20914], [13158, 34411], [13159, 23815], [13160, 23456], [13161, 25277], [13162, 37228], [13163, 30068], [13164, 36364], [13165, 31264], [13166, 24833], [13167, 31609], [13168, 20167], [13169, 32504], [13170, 30597], [13171, 19985], [13172, 33261],
                [13173, 21021], [13174, 20986], [13175, 27249], [13176, 21416], [13177, 36487], [13178, 38148], [13179, 38607], [13180, 28353], [13181, 38500], [13182, 26970], [13345, 30784], [13346, 20648], [13347, 30679], [13348, 25616], [13349, 35302], [13350, 22788], [13351, 25571], [13352, 24029], [13353, 31359], [13354, 26941], [13355, 20256], [13356, 33337], [13357, 21912], [13358, 20018], [13359, 30126], [13360, 31383], [13361, 24162], [13362, 24202], [13363, 38383], [13364, 21019], [13365, 21561], [13366, 28810], [13367, 25462], [13368, 38180], [13369, 22402], [13370, 26149],
                [13371, 26943], [13372, 37255], [13373, 21767], [13374, 28147], [13375, 32431], [13376, 34850], [13377, 25139], [13378, 32496], [13379, 30133], [13380, 33576], [13381, 30913], [13382, 38604], [13383, 36766], [13384, 24904], [13385, 29943], [13386, 35789], [13387, 27492], [13388, 21050], [13389, 36176], [13390, 27425], [13391, 32874], [13392, 33905], [13393, 22257], [13394, 21254], [13395, 20174], [13396, 19995], [13397, 20945], [13398, 31895], [13399, 37259], [13400, 31751], [13401, 20419], [13402, 36479], [13403, 31713], [13404, 31388], [13405, 25703], [13406, 23828],
                [13407, 20652], [13408, 33030], [13409, 30209], [13410, 31929], [13411, 28140], [13412, 32736], [13413, 26449], [13414, 23384], [13415, 23544], [13416, 30923], [13417, 25774], [13418, 25619], [13419, 25514], [13420, 25387], [13421, 38169], [13422, 25645], [13423, 36798], [13424, 31572], [13425, 30249], [13426, 25171], [13427, 22823], [13428, 21574], [13429, 27513], [13430, 20643], [13431, 25140], [13432, 24102], [13433, 27526], [13434, 20195], [13435, 36151], [13436, 34955], [13437, 24453], [13438, 36910], [13601, 24608], [13602, 32829], [13603, 25285], [13604, 20025],
                [13605, 21333], [13606, 37112], [13607, 25528], [13608, 32966], [13609, 26086], [13610, 27694], [13611, 20294], [13612, 24814], [13613, 28129], [13614, 35806], [13615, 24377], [13616, 34507], [13617, 24403], [13618, 25377], [13619, 20826], [13620, 33633], [13621, 26723], [13622, 20992], [13623, 25443], [13624, 36424], [13625, 20498], [13626, 23707], [13627, 31095], [13628, 23548], [13629, 21040], [13630, 31291], [13631, 24764], [13632, 36947], [13633, 30423], [13634, 24503], [13635, 24471], [13636, 30340], [13637, 36460], [13638, 28783], [13639, 30331], [13640, 31561],
                [13641, 30634], [13642, 20979], [13643, 37011], [13644, 22564], [13645, 20302], [13646, 28404], [13647, 36842], [13648, 25932], [13649, 31515], [13650, 29380], [13651, 28068], [13652, 32735], [13653, 23265], [13654, 25269], [13655, 24213], [13656, 22320], [13657, 33922], [13658, 31532], [13659, 24093], [13660, 24351], [13661, 36882], [13662, 32532], [13663, 39072], [13664, 25474], [13665, 28359], [13666, 30872], [13667, 28857], [13668, 20856], [13669, 38747], [13670, 22443], [13671, 30005], [13672, 20291], [13673, 30008], [13674, 24215], [13675, 24806], [13676, 22880],
                [13677, 28096], [13678, 27583], [13679, 30857], [13680, 21500], [13681, 38613], [13682, 20939], [13683, 20993], [13684, 25481], [13685, 21514], [13686, 38035], [13687, 35843], [13688, 36300], [13689, 29241], [13690, 30879], [13691, 34678], [13692, 36845], [13693, 35853], [13694, 21472], [13857, 19969], [13858, 30447], [13859, 21486], [13860, 38025], [13861, 39030], [13862, 40718], [13863, 38189], [13864, 23450], [13865, 35746], [13866, 20002], [13867, 19996], [13868, 20908], [13869, 33891], [13870, 25026], [13871, 21160], [13872, 26635], [13873, 20375], [13874, 24683],
                [13875, 20923], [13876, 27934], [13877, 20828], [13878, 25238], [13879, 26007], [13880, 38497], [13881, 35910], [13882, 36887], [13883, 30168], [13884, 37117], [13885, 30563], [13886, 27602], [13887, 29322], [13888, 29420], [13889, 35835], [13890, 22581], [13891, 30585], [13892, 36172], [13893, 26460], [13894, 38208], [13895, 32922], [13896, 24230], [13897, 28193], [13898, 22930], [13899, 31471], [13900, 30701], [13901, 38203], [13902, 27573], [13903, 26029], [13904, 32526], [13905, 22534], [13906, 20817], [13907, 38431], [13908, 23545], [13909, 22697], [13910, 21544],
                [13911, 36466], [13912, 25958], [13913, 39039], [13914, 22244], [13915, 38045], [13916, 30462], [13917, 36929], [13918, 25479], [13919, 21702], [13920, 22810], [13921, 22842], [13922, 22427], [13923, 36530], [13924, 26421], [13925, 36346], [13926, 33333], [13927, 21057], [13928, 24816], [13929, 22549], [13930, 34558], [13931, 23784], [13932, 40517], [13933, 20420], [13934, 39069], [13935, 35769], [13936, 23077], [13937, 24694], [13938, 21380], [13939, 25212], [13940, 36943], [13941, 37122], [13942, 39295], [13943, 24681], [13944, 32780], [13945, 20799], [13946, 32819],
                [13947, 23572], [13948, 39285], [13949, 27953], [13950, 20108], [14113, 36144], [14114, 21457], [14115, 32602], [14116, 31567], [14117, 20240], [14118, 20047], [14119, 38400], [14120, 27861], [14121, 29648], [14122, 34281], [14123, 24070], [14124, 30058], [14125, 32763], [14126, 27146], [14127, 30718], [14128, 38034], [14129, 32321], [14130, 20961], [14131, 28902], [14132, 21453], [14133, 36820], [14134, 33539], [14135, 36137], [14136, 29359], [14137, 39277], [14138, 27867], [14139, 22346], [14140, 33459], [14141, 26041], [14142, 32938], [14143, 25151], [14144, 38450],
                [14145, 22952], [14146, 20223], [14147, 35775], [14148, 32442], [14149, 25918], [14150, 33778], [14151, 38750], [14152, 21857], [14153, 39134], [14154, 32933], [14155, 21290], [14156, 35837], [14157, 21536], [14158, 32954], [14159, 24223], [14160, 27832], [14161, 36153], [14162, 33452], [14163, 37210], [14164, 21545], [14165, 27675], [14166, 20998], [14167, 32439], [14168, 22367], [14169, 28954], [14170, 27774], [14171, 31881], [14172, 22859], [14173, 20221], [14174, 24575], [14175, 24868], [14176, 31914], [14177, 20016], [14178, 23553], [14179, 26539], [14180, 34562],
                [14181, 23792], [14182, 38155], [14183, 39118], [14184, 30127], [14185, 28925], [14186, 36898], [14187, 20911], [14188, 32541], [14189, 35773], [14190, 22857], [14191, 20964], [14192, 20315], [14193, 21542], [14194, 22827], [14195, 25975], [14196, 32932], [14197, 23413], [14198, 25206], [14199, 25282], [14200, 36752], [14201, 24133], [14202, 27679], [14203, 31526], [14204, 20239], [14205, 20440], [14206, 26381], [14369, 28014], [14370, 28074], [14371, 31119], [14372, 34993], [14373, 24343], [14374, 29995], [14375, 25242], [14376, 36741], [14377, 20463], [14378, 37340],
                [14379, 26023], [14380, 33071], [14381, 33105], [14382, 24220], [14383, 33104], [14384, 36212], [14385, 21103], [14386, 35206], [14387, 36171], [14388, 22797], [14389, 20613], [14390, 20184], [14391, 38428], [14392, 29238], [14393, 33145], [14394, 36127], [14395, 23500], [14396, 35747], [14397, 38468], [14398, 22919], [14399, 32538], [14400, 21648], [14401, 22134], [14402, 22030], [14403, 35813], [14404, 25913], [14405, 27010], [14406, 38041], [14407, 30422], [14408, 28297], [14409, 24178], [14410, 29976], [14411, 26438], [14412, 26577], [14413, 31487], [14414, 32925],
                [14415, 36214], [14416, 24863], [14417, 31174], [14418, 25954], [14419, 36195], [14420, 20872], [14421, 21018], [14422, 38050], [14423, 32568], [14424, 32923], [14425, 32434], [14426, 23703], [14427, 28207], [14428, 26464], [14429, 31705], [14430, 30347], [14431, 39640], [14432, 33167], [14433, 32660], [14434, 31957], [14435, 25630], [14436, 38224], [14437, 31295], [14438, 21578], [14439, 21733], [14440, 27468], [14441, 25601], [14442, 25096], [14443, 40509], [14444, 33011], [14445, 30105], [14446, 21106], [14447, 38761], [14448, 33883], [14449, 26684], [14450, 34532],
                [14451, 38401], [14452, 38548], [14453, 38124], [14454, 20010], [14455, 21508], [14456, 32473], [14457, 26681], [14458, 36319], [14459, 32789], [14460, 26356], [14461, 24218], [14462, 32697], [14625, 22466], [14626, 32831], [14627, 26775], [14628, 24037], [14629, 25915], [14630, 21151], [14631, 24685], [14632, 40858], [14633, 20379], [14634, 36524], [14635, 20844], [14636, 23467], [14637, 24339], [14638, 24041], [14639, 27742], [14640, 25329], [14641, 36129], [14642, 20849], [14643, 38057], [14644, 21246], [14645, 27807], [14646, 33503], [14647, 29399], [14648, 22434],
                [14649, 26500], [14650, 36141], [14651, 22815], [14652, 36764], [14653, 33735], [14654, 21653], [14655, 31629], [14656, 20272], [14657, 27837], [14658, 23396], [14659, 22993], [14660, 40723], [14661, 21476], [14662, 34506], [14663, 39592], [14664, 35895], [14665, 32929], [14666, 25925], [14667, 39038], [14668, 22266], [14669, 38599], [14670, 21038], [14671, 29916], [14672, 21072], [14673, 23521], [14674, 25346], [14675, 35074], [14676, 20054], [14677, 25296], [14678, 24618], [14679, 26874], [14680, 20851], [14681, 23448], [14682, 20896], [14683, 35266], [14684, 31649],
                [14685, 39302], [14686, 32592], [14687, 24815], [14688, 28748], [14689, 36143], [14690, 20809], [14691, 24191], [14692, 36891], [14693, 29808], [14694, 35268], [14695, 22317], [14696, 30789], [14697, 24402], [14698, 40863], [14699, 38394], [14700, 36712], [14701, 39740], [14702, 35809], [14703, 30328], [14704, 26690], [14705, 26588], [14706, 36330], [14707, 36149], [14708, 21053], [14709, 36746], [14710, 28378], [14711, 26829], [14712, 38149], [14713, 37101], [14714, 22269], [14715, 26524], [14716, 35065], [14717, 36807], [14718, 21704], [14881, 39608], [14882, 23401],
                [14883, 28023], [14884, 27686], [14885, 20133], [14886, 23475], [14887, 39559], [14888, 37219], [14889, 25E3], [14890, 37039], [14891, 38889], [14892, 21547], [14893, 28085], [14894, 23506], [14895, 20989], [14896, 21898], [14897, 32597], [14898, 32752], [14899, 25788], [14900, 25421], [14901, 26097], [14902, 25022], [14903, 24717], [14904, 28938], [14905, 27735], [14906, 27721], [14907, 22831], [14908, 26477], [14909, 33322], [14910, 22741], [14911, 22158], [14912, 35946], [14913, 27627], [14914, 37085], [14915, 22909], [14916, 32791], [14917, 21495], [14918, 28009],
                [14919, 21621], [14920, 21917], [14921, 33655], [14922, 33743], [14923, 26680], [14924, 31166], [14925, 21644], [14926, 20309], [14927, 21512], [14928, 30418], [14929, 35977], [14930, 38402], [14931, 27827], [14932, 28088], [14933, 36203], [14934, 35088], [14935, 40548], [14936, 36154], [14937, 22079], [14938, 40657], [14939, 30165], [14940, 24456], [14941, 29408], [14942, 24680], [14943, 21756], [14944, 20136], [14945, 27178], [14946, 34913], [14947, 24658], [14948, 36720], [14949, 21700], [14950, 28888], [14951, 34425], [14952, 40511], [14953, 27946], [14954, 23439],
                [14955, 24344], [14956, 32418], [14957, 21897], [14958, 20399], [14959, 29492], [14960, 21564], [14961, 21402], [14962, 20505], [14963, 21518], [14964, 21628], [14965, 20046], [14966, 24573], [14967, 29786], [14968, 22774], [14969, 33899], [14970, 32993], [14971, 34676], [14972, 29392], [14973, 31946], [14974, 28246], [15137, 24359], [15138, 34382], [15139, 21804], [15140, 25252], [15141, 20114], [15142, 27818], [15143, 25143], [15144, 33457], [15145, 21719], [15146, 21326], [15147, 29502], [15148, 28369], [15149, 30011], [15150, 21010], [15151, 21270], [15152, 35805],
                [15153, 27088], [15154, 24458], [15155, 24576], [15156, 28142], [15157, 22351], [15158, 27426], [15159, 29615], [15160, 26707], [15161, 36824], [15162, 32531], [15163, 25442], [15164, 24739], [15165, 21796], [15166, 30186], [15167, 35938], [15168, 28949], [15169, 28067], [15170, 23462], [15171, 24187], [15172, 33618], [15173, 24908], [15174, 40644], [15175, 30970], [15176, 34647], [15177, 31783], [15178, 30343], [15179, 20976], [15180, 24822], [15181, 29004], [15182, 26179], [15183, 24140], [15184, 24653], [15185, 35854], [15186, 28784], [15187, 25381], [15188, 36745],
                [15189, 24509], [15190, 24674], [15191, 34516], [15192, 22238], [15193, 27585], [15194, 24724], [15195, 24935], [15196, 21321], [15197, 24800], [15198, 26214], [15199, 36159], [15200, 31229], [15201, 20250], [15202, 28905], [15203, 27719], [15204, 35763], [15205, 35826], [15206, 32472], [15207, 33636], [15208, 26127], [15209, 23130], [15210, 39746], [15211, 27985], [15212, 28151], [15213, 35905], [15214, 27963], [15215, 20249], [15216, 28779], [15217, 33719], [15218, 25110], [15219, 24785], [15220, 38669], [15221, 36135], [15222, 31096], [15223, 20987], [15224, 22334],
                [15225, 22522], [15226, 26426], [15227, 30072], [15228, 31293], [15229, 31215], [15230, 31637], [15393, 32908], [15394, 39269], [15395, 36857], [15396, 28608], [15397, 35749], [15398, 40481], [15399, 23020], [15400, 32489], [15401, 32521], [15402, 21513], [15403, 26497], [15404, 26840], [15405, 36753], [15406, 31821], [15407, 38598], [15408, 21450], [15409, 24613], [15410, 30142], [15411, 27762], [15412, 21363], [15413, 23241], [15414, 32423], [15415, 25380], [15416, 20960], [15417, 33034], [15418, 24049], [15419, 34015], [15420, 25216], [15421, 20864], [15422, 23395],
                [15423, 20238], [15424, 31085], [15425, 21058], [15426, 24760], [15427, 27982], [15428, 23492], [15429, 23490], [15430, 35745], [15431, 35760], [15432, 26082], [15433, 24524], [15434, 38469], [15435, 22931], [15436, 32487], [15437, 32426], [15438, 22025], [15439, 26551], [15440, 22841], [15441, 20339], [15442, 23478], [15443, 21152], [15444, 33626], [15445, 39050], [15446, 36158], [15447, 30002], [15448, 38078], [15449, 20551], [15450, 31292], [15451, 20215], [15452, 26550], [15453, 39550], [15454, 23233], [15455, 27516], [15456, 30417], [15457, 22362], [15458, 23574],
                [15459, 31546], [15460, 38388], [15461, 29006], [15462, 20860], [15463, 32937], [15464, 33392], [15465, 22904], [15466, 32516], [15467, 33575], [15468, 26816], [15469, 26604], [15470, 30897], [15471, 30839], [15472, 25315], [15473, 25441], [15474, 31616], [15475, 20461], [15476, 21098], [15477, 20943], [15478, 33616], [15479, 27099], [15480, 37492], [15481, 36341], [15482, 36145], [15483, 35265], [15484, 38190], [15485, 31661], [15486, 20214], [15649, 20581], [15650, 33328], [15651, 21073], [15652, 39279], [15653, 28176], [15654, 28293], [15655, 28071], [15656, 24314],
                [15657, 20725], [15658, 23004], [15659, 23558], [15660, 27974], [15661, 27743], [15662, 30086], [15663, 33931], [15664, 26728], [15665, 22870], [15666, 35762], [15667, 21280], [15668, 37233], [15669, 38477], [15670, 34121], [15671, 26898], [15672, 30977], [15673, 28966], [15674, 33014], [15675, 20132], [15676, 37066], [15677, 27975], [15678, 39556], [15679, 23047], [15680, 22204], [15681, 25605], [15682, 38128], [15683, 30699], [15684, 20389], [15685, 33050], [15686, 29409], [15687, 35282], [15688, 39290], [15689, 32564], [15690, 32478], [15691, 21119], [15692, 25945],
                [15693, 37237], [15694, 36735], [15695, 36739], [15696, 21483], [15697, 31382], [15698, 25581], [15699, 25509], [15700, 30342], [15701, 31224], [15702, 34903], [15703, 38454], [15704, 25130], [15705, 21163], [15706, 33410], [15707, 26708], [15708, 26480], [15709, 25463], [15710, 30571], [15711, 31469], [15712, 27905], [15713, 32467], [15714, 35299], [15715, 22992], [15716, 25106], [15717, 34249], [15718, 33445], [15719, 30028], [15720, 20511], [15721, 20171], [15722, 30117], [15723, 35819], [15724, 23626], [15725, 24062], [15726, 31563], [15727, 26020], [15728, 37329],
                [15729, 20170], [15730, 27941], [15731, 35167], [15732, 32039], [15733, 38182], [15734, 20165], [15735, 35880], [15736, 36827], [15737, 38771], [15738, 26187], [15739, 31105], [15740, 36817], [15741, 28908], [15742, 28024], [15905, 23613], [15906, 21170], [15907, 33606], [15908, 20834], [15909, 33550], [15910, 30555], [15911, 26230], [15912, 40120], [15913, 20140], [15914, 24778], [15915, 31934], [15916, 31923], [15917, 32463], [15918, 20117], [15919, 35686], [15920, 26223], [15921, 39048], [15922, 38745], [15923, 22659], [15924, 25964], [15925, 38236], [15926, 24452],
                [15927, 30153], [15928, 38742], [15929, 31455], [15930, 31454], [15931, 20928], [15932, 28847], [15933, 31384], [15934, 25578], [15935, 31350], [15936, 32416], [15937, 29590], [15938, 38893], [15939, 20037], [15940, 28792], [15941, 20061], [15942, 37202], [15943, 21417], [15944, 25937], [15945, 26087], [15946, 33276], [15947, 33285], [15948, 21646], [15949, 23601], [15950, 30106], [15951, 38816], [15952, 25304], [15953, 29401], [15954, 30141], [15955, 23621], [15956, 39545], [15957, 33738], [15958, 23616], [15959, 21632], [15960, 30697], [15961, 20030], [15962, 27822],
                [15963, 32858], [15964, 25298], [15965, 25454], [15966, 24040], [15967, 20855], [15968, 36317], [15969, 36382], [15970, 38191], [15971, 20465], [15972, 21477], [15973, 24807], [15974, 28844], [15975, 21095], [15976, 25424], [15977, 40515], [15978, 23071], [15979, 20518], [15980, 30519], [15981, 21367], [15982, 32482], [15983, 25733], [15984, 25899], [15985, 25225], [15986, 25496], [15987, 20500], [15988, 29237], [15989, 35273], [15990, 20915], [15991, 35776], [15992, 32477], [15993, 22343], [15994, 33740], [15995, 38055], [15996, 20891], [15997, 21531], [15998, 23803],
                [16161, 20426], [16162, 31459], [16163, 27994], [16164, 37089], [16165, 39567], [16166, 21888], [16167, 21654], [16168, 21345], [16169, 21679], [16170, 24320], [16171, 25577], [16172, 26999], [16173, 20975], [16174, 24936], [16175, 21002], [16176, 22570], [16177, 21208], [16178, 22350], [16179, 30733], [16180, 30475], [16181, 24247], [16182, 24951], [16183, 31968], [16184, 25179], [16185, 25239], [16186, 20130], [16187, 28821], [16188, 32771], [16189, 25335], [16190, 28900], [16191, 38752], [16192, 22391], [16193, 33499], [16194, 26607], [16195, 26869], [16196, 30933],
                [16197, 39063], [16198, 31185], [16199, 22771], [16200, 21683], [16201, 21487], [16202, 28212], [16203, 20811], [16204, 21051], [16205, 23458], [16206, 35838], [16207, 32943], [16208, 21827], [16209, 22438], [16210, 24691], [16211, 22353], [16212, 21549], [16213, 31354], [16214, 24656], [16215, 23380], [16216, 25511], [16217, 25248], [16218, 21475], [16219, 25187], [16220, 23495], [16221, 26543], [16222, 21741], [16223, 31391], [16224, 33510], [16225, 37239], [16226, 24211], [16227, 35044], [16228, 22840], [16229, 22446], [16230, 25358], [16231, 36328], [16232, 33007],
                [16233, 22359], [16234, 31607], [16235, 20393], [16236, 24555], [16237, 23485], [16238, 27454], [16239, 21281], [16240, 31568], [16241, 29378], [16242, 26694], [16243, 30719], [16244, 30518], [16245, 26103], [16246, 20917], [16247, 20111], [16248, 30420], [16249, 23743], [16250, 31397], [16251, 33909], [16252, 22862], [16253, 39745], [16254, 20608], [16417, 39304], [16418, 24871], [16419, 28291], [16420, 22372], [16421, 26118], [16422, 25414], [16423, 22256], [16424, 25324], [16425, 25193], [16426, 24275], [16427, 38420], [16428, 22403], [16429, 25289], [16430, 21895],
                [16431, 34593], [16432, 33098], [16433, 36771], [16434, 21862], [16435, 33713], [16436, 26469], [16437, 36182], [16438, 34013], [16439, 23146], [16440, 26639], [16441, 25318], [16442, 31726], [16443, 38417], [16444, 20848], [16445, 28572], [16446, 35888], [16447, 25597], [16448, 35272], [16449, 25042], [16450, 32518], [16451, 28866], [16452, 28389], [16453, 29701], [16454, 27028], [16455, 29436], [16456, 24266], [16457, 37070], [16458, 26391], [16459, 28010], [16460, 25438], [16461, 21171], [16462, 29282], [16463, 32769], [16464, 20332], [16465, 23013], [16466, 37226],
                [16467, 28889], [16468, 28061], [16469, 21202], [16470, 20048], [16471, 38647], [16472, 38253], [16473, 34174], [16474, 30922], [16475, 32047], [16476, 20769], [16477, 22418], [16478, 25794], [16479, 32907], [16480, 31867], [16481, 27882], [16482, 26865], [16483, 26974], [16484, 20919], [16485, 21400], [16486, 26792], [16487, 29313], [16488, 40654], [16489, 31729], [16490, 29432], [16491, 31163], [16492, 28435], [16493, 29702], [16494, 26446], [16495, 37324], [16496, 40100], [16497, 31036], [16498, 33673], [16499, 33620], [16500, 21519], [16501, 26647], [16502, 20029],
                [16503, 21385], [16504, 21169], [16505, 30782], [16506, 21382], [16507, 21033], [16508, 20616], [16509, 20363], [16510, 20432], [16673, 30178], [16674, 31435], [16675, 31890], [16676, 27813], [16677, 38582], [16678, 21147], [16679, 29827], [16680, 21737], [16681, 20457], [16682, 32852], [16683, 33714], [16684, 36830], [16685, 38256], [16686, 24265], [16687, 24604], [16688, 28063], [16689, 24088], [16690, 25947], [16691, 33080], [16692, 38142], [16693, 24651], [16694, 28860], [16695, 32451], [16696, 31918], [16697, 20937], [16698, 26753], [16699, 31921], [16700, 33391],
                [16701, 20004], [16702, 36742], [16703, 37327], [16704, 26238], [16705, 20142], [16706, 35845], [16707, 25769], [16708, 32842], [16709, 20698], [16710, 30103], [16711, 29134], [16712, 23525], [16713, 36797], [16714, 28518], [16715, 20102], [16716, 25730], [16717, 38243], [16718, 24278], [16719, 26009], [16720, 21015], [16721, 35010], [16722, 28872], [16723, 21155], [16724, 29454], [16725, 29747], [16726, 26519], [16727, 30967], [16728, 38678], [16729, 20020], [16730, 37051], [16731, 40158], [16732, 28107], [16733, 20955], [16734, 36161], [16735, 21533], [16736, 25294],
                [16737, 29618], [16738, 33777], [16739, 38646], [16740, 40836], [16741, 38083], [16742, 20278], [16743, 32666], [16744, 20940], [16745, 28789], [16746, 38517], [16747, 23725], [16748, 39046], [16749, 21478], [16750, 20196], [16751, 28316], [16752, 29705], [16753, 27060], [16754, 30827], [16755, 39311], [16756, 30041], [16757, 21016], [16758, 30244], [16759, 27969], [16760, 26611], [16761, 20845], [16762, 40857], [16763, 32843], [16764, 21657], [16765, 31548], [16766, 31423], [16929, 38534], [16930, 22404], [16931, 25314], [16932, 38471], [16933, 27004], [16934, 23044],
                [16935, 25602], [16936, 31699], [16937, 28431], [16938, 38475], [16939, 33446], [16940, 21346], [16941, 39045], [16942, 24208], [16943, 28809], [16944, 25523], [16945, 21348], [16946, 34383], [16947, 40065], [16948, 40595], [16949, 30860], [16950, 38706], [16951, 36335], [16952, 36162], [16953, 40575], [16954, 28510], [16955, 31108], [16956, 24405], [16957, 38470], [16958, 25134], [16959, 39540], [16960, 21525], [16961, 38109], [16962, 20387], [16963, 26053], [16964, 23653], [16965, 23649], [16966, 32533], [16967, 34385], [16968, 27695], [16969, 24459], [16970, 29575],
                [16971, 28388], [16972, 32511], [16973, 23782], [16974, 25371], [16975, 23402], [16976, 28390], [16977, 21365], [16978, 20081], [16979, 25504], [16980, 30053], [16981, 25249], [16982, 36718], [16983, 20262], [16984, 20177], [16985, 27814], [16986, 32438], [16987, 35770], [16988, 33821], [16989, 34746], [16990, 32599], [16991, 36923], [16992, 38179], [16993, 31657], [16994, 39585], [16995, 35064], [16996, 33853], [16997, 27931], [16998, 39558], [16999, 32476], [17E3, 22920], [17001, 40635], [17002, 29595], [17003, 30721], [17004, 34434], [17005, 39532], [17006, 39554],
                [17007, 22043], [17008, 21527], [17009, 22475], [17010, 20080], [17011, 40614], [17012, 21334], [17013, 36808], [17014, 33033], [17015, 30610], [17016, 39314], [17017, 34542], [17018, 28385], [17019, 34067], [17020, 26364], [17021, 24930], [17022, 28459], [17185, 35881], [17186, 33426], [17187, 33579], [17188, 30450], [17189, 27667], [17190, 24537], [17191, 33725], [17192, 29483], [17193, 33541], [17194, 38170], [17195, 27611], [17196, 30683], [17197, 38086], [17198, 21359], [17199, 33538], [17200, 20882], [17201, 24125], [17202, 35980], [17203, 36152], [17204, 20040],
                [17205, 29611], [17206, 26522], [17207, 26757], [17208, 37238], [17209, 38665], [17210, 29028], [17211, 27809], [17212, 30473], [17213, 23186], [17214, 38209], [17215, 27599], [17216, 32654], [17217, 26151], [17218, 23504], [17219, 22969], [17220, 23194], [17221, 38376], [17222, 38391], [17223, 20204], [17224, 33804], [17225, 33945], [17226, 27308], [17227, 30431], [17228, 38192], [17229, 29467], [17230, 26790], [17231, 23391], [17232, 30511], [17233, 37274], [17234, 38753], [17235, 31964], [17236, 36855], [17237, 35868], [17238, 24357], [17239, 31859], [17240, 31192],
                [17241, 35269], [17242, 27852], [17243, 34588], [17244, 23494], [17245, 24130], [17246, 26825], [17247, 30496], [17248, 32501], [17249, 20885], [17250, 20813], [17251, 21193], [17252, 23081], [17253, 32517], [17254, 38754], [17255, 33495], [17256, 25551], [17257, 30596], [17258, 34256], [17259, 31186], [17260, 28218], [17261, 24217], [17262, 22937], [17263, 34065], [17264, 28781], [17265, 27665], [17266, 25279], [17267, 30399], [17268, 25935], [17269, 24751], [17270, 38397], [17271, 26126], [17272, 34719], [17273, 40483], [17274, 38125], [17275, 21517], [17276, 21629],
                [17277, 35884], [17278, 25720], [17441, 25721], [17442, 34321], [17443, 27169], [17444, 33180], [17445, 30952], [17446, 25705], [17447, 39764], [17448, 25273], [17449, 26411], [17450, 33707], [17451, 22696], [17452, 40664], [17453, 27819], [17454, 28448], [17455, 23518], [17456, 38476], [17457, 35851], [17458, 29279], [17459, 26576], [17460, 25287], [17461, 29281], [17462, 20137], [17463, 22982], [17464, 27597], [17465, 22675], [17466, 26286], [17467, 24149], [17468, 21215], [17469, 24917], [17470, 26408], [17471, 30446], [17472, 30566], [17473, 29287], [17474, 31302],
                [17475, 25343], [17476, 21738], [17477, 21584], [17478, 38048], [17479, 37027], [17480, 23068], [17481, 32435], [17482, 27670], [17483, 20035], [17484, 22902], [17485, 32784], [17486, 22856], [17487, 21335], [17488, 30007], [17489, 38590], [17490, 22218], [17491, 25376], [17492, 33041], [17493, 24700], [17494, 38393], [17495, 28118], [17496, 21602], [17497, 39297], [17498, 20869], [17499, 23273], [17500, 33021], [17501, 22958], [17502, 38675], [17503, 20522], [17504, 27877], [17505, 23612], [17506, 25311], [17507, 20320], [17508, 21311], [17509, 33147], [17510, 36870],
                [17511, 28346], [17512, 34091], [17513, 25288], [17514, 24180], [17515, 30910], [17516, 25781], [17517, 25467], [17518, 24565], [17519, 23064], [17520, 37247], [17521, 40479], [17522, 23615], [17523, 25423], [17524, 32834], [17525, 23421], [17526, 21870], [17527, 38218], [17528, 38221], [17529, 28037], [17530, 24744], [17531, 26592], [17532, 29406], [17533, 20957], [17534, 23425], [17697, 25319], [17698, 27870], [17699, 29275], [17700, 25197], [17701, 38062], [17702, 32445], [17703, 33043], [17704, 27987], [17705, 20892], [17706, 24324], [17707, 22900], [17708, 21162],
                [17709, 24594], [17710, 22899], [17711, 26262], [17712, 34384], [17713, 30111], [17714, 25386], [17715, 25062], [17716, 31983], [17717, 35834], [17718, 21734], [17719, 27431], [17720, 40485], [17721, 27572], [17722, 34261], [17723, 21589], [17724, 20598], [17725, 27812], [17726, 21866], [17727, 36276], [17728, 29228], [17729, 24085], [17730, 24597], [17731, 29750], [17732, 25293], [17733, 25490], [17734, 29260], [17735, 24472], [17736, 28227], [17737, 27966], [17738, 25856], [17739, 28504], [17740, 30424], [17741, 30928], [17742, 30460], [17743, 30036], [17744, 21028],
                [17745, 21467], [17746, 20051], [17747, 24222], [17748, 26049], [17749, 32810], [17750, 32982], [17751, 25243], [17752, 21638], [17753, 21032], [17754, 28846], [17755, 34957], [17756, 36305], [17757, 27873], [17758, 21624], [17759, 32986], [17760, 22521], [17761, 35060], [17762, 36180], [17763, 38506], [17764, 37197], [17765, 20329], [17766, 27803], [17767, 21943], [17768, 30406], [17769, 30768], [17770, 25256], [17771, 28921], [17772, 28558], [17773, 24429], [17774, 34028], [17775, 26842], [17776, 30844], [17777, 31735], [17778, 33192], [17779, 26379], [17780, 40527],
                [17781, 25447], [17782, 30896], [17783, 22383], [17784, 30738], [17785, 38713], [17786, 25209], [17787, 25259], [17788, 21128], [17789, 29749], [17790, 27607], [17953, 21860], [17954, 33086], [17955, 30130], [17956, 30382], [17957, 21305], [17958, 30174], [17959, 20731], [17960, 23617], [17961, 35692], [17962, 31687], [17963, 20559], [17964, 29255], [17965, 39575], [17966, 39128], [17967, 28418], [17968, 29922], [17969, 31080], [17970, 25735], [17971, 30629], [17972, 25340], [17973, 39057], [17974, 36139], [17975, 21697], [17976, 32856], [17977, 20050], [17978, 22378],
                [17979, 33529], [17980, 33805], [17981, 24179], [17982, 20973], [17983, 29942], [17984, 35780], [17985, 23631], [17986, 22369], [17987, 27900], [17988, 39047], [17989, 23110], [17990, 30772], [17991, 39748], [17992, 36843], [17993, 31893], [17994, 21078], [17995, 25169], [17996, 38138], [17997, 20166], [17998, 33670], [17999, 33889], [18E3, 33769], [18001, 33970], [18002, 22484], [18003, 26420], [18004, 22275], [18005, 26222], [18006, 28006], [18007, 35889], [18008, 26333], [18009, 28689], [18010, 26399], [18011, 27450], [18012, 26646], [18013, 25114], [18014, 22971],
                [18015, 19971], [18016, 20932], [18017, 28422], [18018, 26578], [18019, 27791], [18020, 20854], [18021, 26827], [18022, 22855], [18023, 27495], [18024, 30054], [18025, 23822], [18026, 33040], [18027, 40784], [18028, 26071], [18029, 31048], [18030, 31041], [18031, 39569], [18032, 36215], [18033, 23682], [18034, 20062], [18035, 20225], [18036, 21551], [18037, 22865], [18038, 30732], [18039, 22120], [18040, 27668], [18041, 36804], [18042, 24323], [18043, 27773], [18044, 27875], [18045, 35755], [18046, 25488], [18209, 24688], [18210, 27965], [18211, 29301], [18212, 25190],
                [18213, 38030], [18214, 38085], [18215, 21315], [18216, 36801], [18217, 31614], [18218, 20191], [18219, 35878], [18220, 20094], [18221, 40660], [18222, 38065], [18223, 38067], [18224, 21069], [18225, 28508], [18226, 36963], [18227, 27973], [18228, 35892], [18229, 22545], [18230, 23884], [18231, 27424], [18232, 27465], [18233, 26538], [18234, 21595], [18235, 33108], [18236, 32652], [18237, 22681], [18238, 34103], [18239, 24378], [18240, 25250], [18241, 27207], [18242, 38201], [18243, 25970], [18244, 24708], [18245, 26725], [18246, 30631], [18247, 20052], [18248, 20392],
                [18249, 24039], [18250, 38808], [18251, 25772], [18252, 32728], [18253, 23789], [18254, 20431], [18255, 31373], [18256, 20999], [18257, 33540], [18258, 19988], [18259, 24623], [18260, 31363], [18261, 38054], [18262, 20405], [18263, 20146], [18264, 31206], [18265, 29748], [18266, 21220], [18267, 33465], [18268, 25810], [18269, 31165], [18270, 23517], [18271, 27777], [18272, 38738], [18273, 36731], [18274, 27682], [18275, 20542], [18276, 21375], [18277, 28165], [18278, 25806], [18279, 26228], [18280, 27696], [18281, 24773], [18282, 39031], [18283, 35831], [18284, 24198],
                [18285, 29756], [18286, 31351], [18287, 31179], [18288, 19992], [18289, 37041], [18290, 29699], [18291, 27714], [18292, 22234], [18293, 37195], [18294, 27845], [18295, 36235], [18296, 21306], [18297, 34502], [18298, 26354], [18299, 36527], [18300, 23624], [18301, 39537], [18302, 28192], [18465, 21462], [18466, 23094], [18467, 40843], [18468, 36259], [18469, 21435], [18470, 22280], [18471, 39079], [18472, 26435], [18473, 37275], [18474, 27849], [18475, 20840], [18476, 30154], [18477, 25331], [18478, 29356], [18479, 21048], [18480, 21149], [18481, 32570], [18482, 28820],
                [18483, 30264], [18484, 21364], [18485, 40522], [18486, 27063], [18487, 30830], [18488, 38592], [18489, 35033], [18490, 32676], [18491, 28982], [18492, 29123], [18493, 20873], [18494, 26579], [18495, 29924], [18496, 22756], [18497, 25880], [18498, 22199], [18499, 35753], [18500, 39286], [18501, 25200], [18502, 32469], [18503, 24825], [18504, 28909], [18505, 22764], [18506, 20161], [18507, 20154], [18508, 24525], [18509, 38887], [18510, 20219], [18511, 35748], [18512, 20995], [18513, 22922], [18514, 32427], [18515, 25172], [18516, 20173], [18517, 26085], [18518, 25102],
                [18519, 33592], [18520, 33993], [18521, 33635], [18522, 34701], [18523, 29076], [18524, 28342], [18525, 23481], [18526, 32466], [18527, 20887], [18528, 25545], [18529, 26580], [18530, 32905], [18531, 33593], [18532, 34837], [18533, 20754], [18534, 23418], [18535, 22914], [18536, 36785], [18537, 20083], [18538, 27741], [18539, 20837], [18540, 35109], [18541, 36719], [18542, 38446], [18543, 34122], [18544, 29790], [18545, 38160], [18546, 38384], [18547, 28070], [18548, 33509], [18549, 24369], [18550, 25746], [18551, 27922], [18552, 33832], [18553, 33134], [18554, 40131],
                [18555, 22622], [18556, 36187], [18557, 19977], [18558, 21441], [18721, 20254], [18722, 25955], [18723, 26705], [18724, 21971], [18725, 20007], [18726, 25620], [18727, 39578], [18728, 25195], [18729, 23234], [18730, 29791], [18731, 33394], [18732, 28073], [18733, 26862], [18734, 20711], [18735, 33678], [18736, 30722], [18737, 26432], [18738, 21049], [18739, 27801], [18740, 32433], [18741, 20667], [18742, 21861], [18743, 29022], [18744, 31579], [18745, 26194], [18746, 29642], [18747, 33515], [18748, 26441], [18749, 23665], [18750, 21024], [18751, 29053], [18752, 34923],
                [18753, 38378], [18754, 38485], [18755, 25797], [18756, 36193], [18757, 33203], [18758, 21892], [18759, 27733], [18760, 25159], [18761, 32558], [18762, 22674], [18763, 20260], [18764, 21830], [18765, 36175], [18766, 26188], [18767, 19978], [18768, 23578], [18769, 35059], [18770, 26786], [18771, 25422], [18772, 31245], [18773, 28903], [18774, 33421], [18775, 21242], [18776, 38902], [18777, 23569], [18778, 21736], [18779, 37045], [18780, 32461], [18781, 22882], [18782, 36170], [18783, 34503], [18784, 18785, 33292], [18786, 36198], [18787, 25668], [18788, 23556], [18789,
                    24913], [18790, 28041], [18791, 31038], [18792, 35774], [18793, 30775], [18794, 30003], [18795, 21627], [18796, 20280], [18797, 36523], [18798, 28145], [18799, 23072], [18800, 32453], [18801, 31070], [18802, 27784], [18803, 23457], [18804, 23158], [18805, 29978], [18806, 32958], [18807, 24910], [18808, 28183], [18809, 22768], [18810, 29983], [18811, 29989], [18812, 29298], [18813, 21319], [18814, 32499], [18977, 30465], [18978, 30427], [18979, 21097], [18980, 32988], [18981, 22307], [18982, 24072], [18983, 22833], [18984, 29422], [18985, 26045], [18986, 28287], [18987,
                    35799], [18988, 23608], [18989, 34417], [18990, 21313], [18991, 30707], [18992, 25342], [18993, 26102], [18994, 20160], [18995, 39135], [18996, 34432], [18997, 23454], [18998, 35782], [18999, 21490], [19E3, 30690], [19001, 20351], [19002, 23630], [19003, 39542], [19004, 22987], [19005, 24335], [19006, 31034], [19007, 22763], [19008, 19990], [19009, 26623], [19010, 20107], [19011, 25325], [19012, 35475], [19013, 36893], [19014, 21183], [19015, 26159], [19016, 21980], [19017, 22124], [19018, 36866], [19019, 20181], [19020, 20365], [19021, 37322], [19022, 39280], [19023,
                    27663], [19024, 24066], [19025, 24643], [19026, 23460], [19027, 35270], [19028, 35797], [19029, 25910], [19030, 25163], [19031, 39318], [19032, 23432], [19033, 23551], [19034, 25480], [19035, 21806], [19036, 21463], [19037, 30246], [19038, 20861], [19039, 34092], [19040, 26530], [19041, 26803], [19042, 27530], [19043, 25234], [19044, 36755], [19045, 21460], [19046, 33298], [19047, 28113], [19048, 30095], [19049, 20070], [19050, 36174], [19051, 23408], [19052, 29087], [19053, 34223], [19054, 26257], [19055, 26329], [19056, 32626], [19057, 34560], [19058, 40653], [19059,
                    40736], [19060, 23646], [19061, 26415], [19062, 36848], [19063, 26641], [19064, 26463], [19065, 25101], [19066, 31446], [19067, 22661], [19068, 24246], [19069, 25968], [19070, 28465], [19233, 24661], [19234, 21047], [19235, 32781], [19236, 25684], [19237, 34928], [19238, 29993], [19239, 24069], [19240, 26643], [19241, 25332], [19242, 38684], [19243, 21452], [19244, 29245], [19245, 35841], [19246, 27700], [19247, 30561], [19248, 31246], [19249, 21550], [19250, 30636], [19251, 39034], [19252, 33308], [19253, 35828], [19254, 30805], [19255, 26388], [19256, 28865], [19257,
                    26031], [19258, 25749], [19259, 22070], [19260, 24605], [19261, 31169], [19262, 21496], [19263, 19997], [19264, 27515], [19265, 32902], [19266, 23546], [19267, 21987], [19268, 22235], [19269, 20282], [19270, 20284], [19271, 39282], [19272, 24051], [19273, 26494], [19274, 32824], [19275, 24578], [19276, 39042], [19277, 36865], [19278, 23435], [19279, 35772], [19280, 35829], [19281, 25628], [19282, 33368], [19283, 25822], [19284, 22013], [19285, 33487], [19286, 37221], [19287, 20439], [19288, 32032], [19289, 36895], [19290, 31903], [19291, 20723], [19292, 22609], [19293,
                    28335], [19294, 23487], [19295, 35785], [19296, 32899], [19297, 37240], [19298, 33948], [19299, 31639], [19300, 34429], [19301, 38539], [19302, 38543], [19303, 32485], [19304, 39635], [19305, 30862], [19306, 23681], [19307, 31319], [19308, 36930], [19309, 38567], [19310, 31071], [19311, 23385], [19312, 25439], [19313, 31499], [19314, 34001], [19315, 26797], [19316, 21766], [19317, 32553], [19318, 29712], [19319, 32034], [19320, 38145], [19321, 25152], [19322, 22604], [19323, 20182], [19324, 23427], [19325, 22905], [19326, 22612], [19489, 29549], [19490, 25374], [19491,
                    36427], [19492, 36367], [19493, 32974], [19494, 33492], [19495, 25260], [19496, 21488], [19497, 27888], [19498, 37214], [19499, 22826], [19500, 24577], [19501, 27760], [19502, 22349], [19503, 25674], [19504, 36138], [19505, 30251], [19506, 28393], [19507, 22363], [19508, 27264], [19509, 30192], [19510, 28525], [19511, 35885], [19512, 35848], [19513, 22374], [19514, 27631], [19515, 34962], [19516, 30899], [19517, 25506], [19518, 21497], [19519, 28845], [19520, 27748], [19521, 22616], [19522, 25642], [19523, 22530], [19524, 26848], [19525, 33179], [19526, 21776], [19527,
                    31958], [19528, 20504], [19529, 36538], [19530, 28108], [19531, 36255], [19532, 28907], [19533, 25487], [19534, 28059], [19535, 28372], [19536, 32486], [19537, 33796], [19538, 26691], [19539, 36867], [19540, 28120], [19541, 38518], [19542, 35752], [19543, 22871], [19544, 29305], [19545, 34276], [19546, 33150], [19547, 30140], [19548, 35466], [19549, 26799], [19550, 21076], [19551, 36386], [19552, 38161], [19553, 25552], [19554, 39064], [19555, 36420], [19556, 21884], [19557, 20307], [19558, 26367], [19559, 22159], [19560, 24789], [19561, 28053], [19562, 21059], [19563,
                    23625], [19564, 22825], [19565, 28155], [19566, 22635], [19567, 3E4], [19568, 29980], [19569, 24684], [19570, 33300], [19571, 33094], [19572, 25361], [19573, 26465], [19574, 36834], [19575, 30522], [19576, 36339], [19577, 36148], [19578, 38081], [19579, 24086], [19580, 21381], [19581, 21548], [19582, 28867], [19745, 27712], [19746, 24311], [19747, 20572], [19748, 20141], [19749, 24237], [19750, 25402], [19751, 33351], [19752, 36890], [19753, 26704], [19754, 37230], [19755, 30643], [19756, 21516], [19757, 38108], [19758, 24420], [19759, 31461], [19760, 26742], [19761,
                    25413], [19762, 31570], [19763, 32479], [19764, 30171], [19765, 20599], [19766, 25237], [19767, 22836], [19768, 36879], [19769, 20984], [19770, 31171], [19771, 31361], [19772, 22270], [19773, 24466], [19774, 36884], [19775, 28034], [19776, 23648], [19777, 22303], [19778, 21520], [19779, 20820], [19780, 28237], [19781, 22242], [19782, 25512], [19783, 39059], [19784, 33151], [19785, 34581], [19786, 35114], [19787, 36864], [19788, 21534], [19789, 23663], [19790, 33216], [19791, 25302], [19792, 25176], [19793, 33073], [19794, 40501], [19795, 38464], [19796, 39534], [19797,
                    39548], [19798, 26925], [19799, 22949], [19800, 25299], [19801, 21822], [19802, 25366], [19803, 21703], [19804, 34521], [19805, 27964], [19806, 23043], [19807, 29926], [19808, 34972], [19809, 27498], [19810, 22806], [19811, 35916], [19812, 24367], [19813, 28286], [19814, 29609], [19815, 39037], [19816, 20024], [19817, 28919], [19818, 23436], [19819, 30871], [19820, 25405], [19821, 26202], [19822, 30358], [19823, 24779], [19824, 23451], [19825, 23113], [19826, 19975], [19827, 33109], [19828, 27754], [19829, 29579], [19830, 20129], [19831, 26505], [19832, 32593], [19833,
                    24448], [19834, 26106], [19835, 26395], [19836, 24536], [19837, 22916], [19838, 23041], [20001, 24013], [20002, 24494], [20003, 21361], [20004, 38886], [20005, 36829], [20006, 26693], [20007, 22260], [20008, 21807], [20009, 24799], [20010, 20026], [20011, 28493], [20012, 32500], [20013, 33479], [20014, 33806], [20015, 22996], [20016, 20255], [20017, 20266], [20018, 23614], [20019, 32428], [20020, 26410], [20021, 34074], [20022, 21619], [20023, 30031], [20024, 32963], [20025, 21890], [20026, 39759], [20027, 20301], [20028, 28205], [20029, 35859], [20030, 23561], [20031,
                    24944], [20032, 21355], [20033, 30239], [20034, 28201], [20035, 34442], [20036, 25991], [20037, 38395], [20038, 32441], [20039, 21563], [20040, 31283], [20041, 32010], [20042, 38382], [20043, 21985], [20044, 32705], [20045, 29934], [20046, 25373], [20047, 34583], [20048, 28065], [20049, 31389], [20050, 25105], [20051, 26017], [20052, 21351], [20053, 25569], [20054, 27779], [20055, 24043], [20056, 21596], [20057, 38056], [20058, 20044], [20059, 27745], [20060, 35820], [20061, 23627], [20062, 26080], [20063, 33436], [20064, 26791], [20065, 21566], [20066, 21556], [20067,
                    27595], [20068, 27494], [20069, 20116], [20070, 25410], [20071, 21320], [20072, 33310], [20073, 20237], [20074, 20398], [20075, 22366], [20076, 25098], [20077, 38654], [20078, 26212], [20079, 29289], [20080, 21247], [20081, 21153], [20082, 24735], [20083, 35823], [20084, 26132], [20085, 29081], [20086, 26512], [20087, 35199], [20088, 30802], [20089, 30717], [20090, 26224], [20091, 22075], [20092, 21560], [20093, 38177], [20094, 29306], [20257, 31232], [20258, 24687], [20259, 24076], [20260, 24713], [20261, 33181], [20262, 22805], [20263, 24796], [20264, 29060], [20265,
                    28911], [20266, 28330], [20267, 27728], [20268, 29312], [20269, 27268], [20270, 34989], [20271, 24109], [20272, 20064], [20273, 23219], [20274, 21916], [20275, 38115], [20276, 27927], [20277, 31995], [20278, 38553], [20279, 25103], [20280, 32454], [20281, 30606], [20282, 34430], [20283, 21283], [20284, 38686], [20285, 36758], [20286, 26247], [20287, 23777], [20288, 20384], [20289, 29421], [20290, 19979], [20291, 21414], [20292, 22799], [20293, 21523], [20294, 25472], [20295, 38184], [20296, 20808], [20297, 20185], [20298, 40092], [20299, 32420], [20300, 21688], [20301,
                    36132], [20302, 34900], [20303, 33335], [20304, 38386], [20305, 28046], [20306, 24358], [20307, 23244], [20308, 26174], [20309, 38505], [20310, 29616], [20311, 29486], [20312, 21439], [20313, 33146], [20314, 39301], [20315, 32673], [20316, 23466], [20317, 38519], [20318, 38480], [20319, 32447], [20320, 30456], [20321, 21410], [20322, 38262], [20323, 39321], [20324, 31665], [20325, 35140], [20326, 28248], [20327, 20065], [20328, 32724], [20329, 31077], [20330, 35814], [20331, 24819], [20332, 21709], [20333, 20139], [20334, 39033], [20335, 24055], [20336, 27233], [20337,
                    20687], [20338, 21521], [20339, 35937], [20340, 33831], [20341, 30813], [20342, 38660], [20343, 21066], [20344, 21742], [20345, 22179], [20346, 38144], [20347, 28040], [20348, 23477], [20349, 28102], [20350, 26195], [20513, 23567], [20514, 23389], [20515, 26657], [20516, 32918], [20517, 21880], [20518, 31505], [20519, 25928], [20520, 26964], [20521, 20123], [20522, 27463], [20523, 34638], [20524, 38795], [20525, 21327], [20526, 25375], [20527, 25658], [20528, 37034], [20529, 26012], [20530, 32961], [20531, 35856], [20532, 20889], [20533, 26800], [20534, 21368], [20535,
                    34809], [20536, 25032], [20537, 27844], [20538, 27899], [20539, 35874], [20540, 23633], [20541, 34218], [20542, 33455], [20543, 38156], [20544, 27427], [20545, 36763], [20546, 26032], [20547, 24571], [20548, 24515], [20549, 20449], [20550, 34885], [20551, 26143], [20552, 33125], [20553, 29481], [20554, 24826], [20555, 20852], [20556, 21009], [20557, 22411], [20558, 24418], [20559, 37026], [20560, 34892], [20561, 37266], [20562, 24184], [20563, 26447], [20564, 24615], [20565, 22995], [20566, 20804], [20567, 20982], [20568, 33016], [20569, 21256], [20570, 27769], [20571,
                    38596], [20572, 29066], [20573, 20241], [20574, 20462], [20575, 32670], [20576, 26429], [20577, 21957], [20578, 38152], [20579, 31168], [20580, 34966], [20581, 32483], [20582, 22687], [20583, 25100], [20584, 38656], [20585, 34394], [20586, 22040], [20587, 39035], [20588, 24464], [20589, 35768], [20590, 33988], [20591, 37207], [20592, 21465], [20593, 26093], [20594, 24207], [20595, 30044], [20596, 24676], [20597, 32110], [20598, 23167], [20599, 32490], [20600, 32493], [20601, 36713], [20602, 21927], [20603, 23459], [20604, 24748], [20605, 26059], [20606, 29572], [20769,
                    36873], [20770, 30307], [20771, 30505], [20772, 32474], [20773, 38772], [20774, 34203], [20775, 23398], [20776, 31348], [20777, 38634], [20778, 34880], [20779, 21195], [20780, 29071], [20781, 24490], [20782, 26092], [20783, 35810], [20784, 23547], [20785, 39535], [20786, 24033], [20787, 27529], [20788, 27739], [20789, 35757], [20790, 35759], [20791, 36874], [20792, 36805], [20793, 21387], [20794, 25276], [20795, 40486], [20796, 40493], [20797, 21568], [20798, 20011], [20799, 33469], [20800, 29273], [20801, 34460], [20802, 23830], [20803, 34905], [20804, 28079], [20805,
                    38597], [20806, 21713], [20807, 20122], [20808, 35766], [20809, 28937], [20810, 21693], [20811, 38409], [20812, 28895], [20813, 28153], [20814, 30416], [20815, 20005], [20816, 30740], [20817, 34578], [20818, 23721], [20819, 24310], [20820, 35328], [20821, 39068], [20822, 38414], [20823, 28814], [20824, 27839], [20825, 22852], [20826, 25513], [20827, 30524], [20828, 34893], [20829, 28436], [20830, 33395], [20831, 22576], [20832, 29141], [20833, 21388], [20834, 30746], [20835, 38593], [20836, 21761], [20837, 24422], [20838, 28976], [20839, 23476], [20840, 35866], [20841,
                    39564], [20842, 27523], [20843, 22830], [20844, 40495], [20845, 31207], [20846, 26472], [20847, 25196], [20848, 20335], [20849, 30113], [20850, 32650], [20851, 27915], [20852, 38451], [20853, 27687], [20854, 20208], [20855, 30162], [20856, 20859], [20857, 26679], [20858, 28478], [20859, 36992], [20860, 33136], [20861, 22934], [20862, 29814], [21025, 25671], [21026, 23591], [21027, 36965], [21028, 31377], [21029, 35875], [21030, 23002], [21031, 21676], [21032, 33280], [21033, 33647], [21034, 35201], [21035, 32768], [21036, 26928], [21037, 22094], [21038, 32822], [21039,
                    29239], [21040, 37326], [21041, 20918], [21042, 20063], [21043, 39029], [21044, 25494], [21045, 19994], [21046, 21494], [21047, 26355], [21048, 33099], [21049, 22812], [21050, 28082], [21051, 19968], [21052, 22777], [21053, 21307], [21054, 25558], [21055, 38129], [21056, 20381], [21057, 20234], [21058, 34915], [21059, 39056], [21060, 22839], [21061, 36951], [21062, 31227], [21063, 20202], [21064, 33008], [21065, 30097], [21066, 27778], [21067, 23452], [21068, 23016], [21069, 24413], [21070, 26885], [21071, 34433], [21072, 20506], [21073, 24050], [21074, 20057], [21075,
                    30691], [21076, 20197], [21077, 33402], [21078, 25233], [21079, 26131], [21080, 37009], [21081, 23673], [21082, 20159], [21083, 24441], [21084, 33222], [21085, 36920], [21086, 32900], [21087, 30123], [21088, 20134], [21089, 35028], [21090, 24847], [21091, 27589], [21092, 24518], [21093, 20041], [21094, 30410], [21095, 28322], [21096, 35811], [21097, 35758], [21098, 35850], [21099, 35793], [21100, 24322], [21101, 32764], [21102, 32716], [21103, 32462], [21104, 33589], [21105, 33643], [21106, 22240], [21107, 27575], [21108, 38899], [21109, 38452], [21110, 23035], [21111,
                    21535], [21112, 38134], [21113, 28139], [21114, 23493], [21115, 39278], [21116, 23609], [21117, 24341], [21118, 38544], [21281, 21360], [21282, 33521], [21283, 27185], [21284, 23156], [21285, 40560], [21286, 24212], [21287, 32552], [21288, 33721], [21289, 21290, 33828], [21291, 33639], [21292, 34631], [21293, 36814], [21294, 36194], [21295, 30408], [21296, 24433], [21297, 39062], [21298, 30828], [21299, 26144], [21300, 21727], [21301, 25317], [21302, 20323], [21303, 33219], [21304, 30152], [21305, 24248], [21306, 38605], [21307, 36362], [21308, 34553], [21309, 21647],
                [21310, 27891], [21311, 28044], [21312, 27704], [21313, 24703], [21314, 21191], [21315, 29992], [21316, 24189], [21317, 20248], [21318, 24736], [21319, 24551], [21320, 23588], [21321, 30001], [21322, 37038], [21323, 38080], [21324, 29369], [21325, 27833], [21326, 28216], [21327, 37193], [21328, 26377], [21329, 21451], [21330, 21491], [21331, 20305], [21332, 37321], [21333, 35825], [21334, 21448], [21335, 24188], [21336, 36802], [21337, 28132], [21338, 20110], [21339, 30402], [21340, 27014], [21341, 34398], [21342, 24858], [21343, 33286], [21344, 20313], [21345, 20446],
                [21346, 36926], [21347, 40060], [21348, 24841], [21349, 28189], [21350, 28180], [21351, 38533], [21352, 20104], [21353, 23089], [21354, 38632], [21355, 19982], [21356, 23679], [21357, 31161], [21358, 23431], [21359, 35821], [21360, 32701], [21361, 29577], [21362, 22495], [21363, 33419], [21364, 37057], [21365, 21505], [21366, 36935], [21367, 21947], [21368, 23786], [21369, 24481], [21370, 24840], [21371, 27442], [21372, 29425], [21373, 32946], [21374, 35465], [21537, 28020], [21538, 23507], [21539, 35029], [21540, 39044], [21541, 35947], [21542, 39533], [21543, 40499],
                [21544, 28170], [21545, 20900], [21546, 20803], [21547, 22435], [21548, 34945], [21549, 21407], [21550, 25588], [21551, 36757], [21552, 22253], [21553, 21592], [21554, 22278], [21555, 29503], [21556, 28304], [21557, 32536], [21558, 36828], [21559, 33489], [21560, 24895], [21561, 24616], [21562, 38498], [21563, 26352], [21564, 32422], [21565, 36234], [21566, 36291], [21567, 38053], [21568, 23731], [21569, 31908], [21570, 26376], [21571, 24742], [21572, 38405], [21573, 32792], [21574, 20113], [21575, 37095], [21576, 21248], [21577, 38504], [21578, 20801], [21579, 36816],
                [21580, 34164], [21581, 37213], [21582, 26197], [21583, 38901], [21584, 23381], [21585, 21277], [21586, 30776], [21587, 26434], [21588, 26685], [21589, 21705], [21590, 28798], [21591, 23472], [21592, 36733], [21593, 20877], [21594, 22312], [21595, 21681], [21596, 25874], [21597, 26242], [21598, 36190], [21599, 36163], [21600, 33039], [21601, 33900], [21602, 36973], [21603, 31967], [21604, 20991], [21605, 34299], [21606, 26531], [21607, 26089], [21608, 28577], [21609, 34468], [21610, 36481], [21611, 22122], [21612, 36896], [21613, 30338], [21614, 28790], [21615, 29157],
                [21616, 36131], [21617, 25321], [21618, 21017], [21619, 27901], [21620, 36156], [21621, 24590], [21622, 22686], [21623, 24974], [21624, 26366], [21625, 36192], [21626, 25166], [21627, 21939], [21628, 28195], [21629, 26413], [21630, 36711], [21793, 38113], [21794, 38392], [21795, 30504], [21796, 26629], [21797, 27048], [21798, 21643], [21799, 20045], [21800, 28856], [21801, 35784], [21802, 25688], [21803, 25995], [21804, 23429], [21805, 31364], [21806, 20538], [21807, 23528], [21808, 30651], [21809, 27617], [21810, 35449], [21811, 31896], [21812, 27838], [21813, 30415],
                [21814, 26025], [21815, 36759], [21816, 23853], [21817, 23637], [21818, 34360], [21819, 26632], [21820, 21344], [21821, 25112], [21822, 31449], [21823, 28251], [21824, 32509], [21825, 27167], [21826, 31456], [21827, 24432], [21828, 28467], [21829, 24352], [21830, 25484], [21831, 28072], [21832, 26454], [21833, 19976], [21834, 24080], [21835, 36134], [21836, 20183], [21837, 32960], [21838, 30260], [21839, 38556], [21840, 25307], [21841, 26157], [21842, 25214], [21843, 27836], [21844, 36213], [21845, 29031], [21846, 32617], [21847, 20806], [21848, 32903], [21849, 21484],
                [21850, 36974], [21851, 25240], [21852, 21746], [21853, 34544], [21854, 36761], [21855, 32773], [21856, 38167], [21857, 34071], [21858, 36825], [21859, 27993], [21860, 29645], [21861, 26015], [21862, 30495], [21863, 29956], [21864, 30759], [21865, 33275], [21866, 36126], [21867, 38024], [21868, 20390], [21869, 26517], [21870, 30137], [21871, 35786], [21872, 38663], [21873, 25391], [21874, 38215], [21875, 38453], [21876, 33976], [21877, 25379], [21878, 30529], [21879, 24449], [21880, 29424], [21881, 20105], [21882, 24596], [21883, 25972], [21884, 25327], [21885, 27491],
                [21886, 25919], [22049, 24103], [22050, 30151], [22051, 37073], [22052, 35777], [22053, 33437], [22054, 26525], [22055, 25903], [22056, 21553], [22057, 34584], [22058, 30693], [22059, 32930], [22060, 33026], [22061, 27713], [22062, 20043], [22063, 32455], [22064, 32844], [22065, 30452], [22066, 26893], [22067, 27542], [22068, 25191], [22069, 20540], [22070, 20356], [22071, 22336], [22072, 25351], [22073, 27490], [22074, 36286], [22075, 21482], [22076, 26088], [22077, 32440], [22078, 24535], [22079, 25370], [22080, 25527], [22081, 22082, 33267], [22083, 32622], [22084,
                    24092], [22085, 23769], [22086, 21046], [22087, 26234], [22088, 31209], [22089, 31258], [22090, 36136], [22091, 28825], [22092, 30164], [22093, 28382], [22094, 27835], [22095, 31378], [22096, 20013], [22097, 30405], [22098, 24544], [22099, 38047], [22100, 34935], [22101, 32456], [22102, 31181], [22103, 32959], [22104, 37325], [22105, 20210], [22106, 20247], [22107, 33311], [22108, 21608], [22109, 24030], [22110, 27954], [22111, 35788], [22112, 31909], [22113, 36724], [22114, 32920], [22115, 24090], [22116, 21650], [22117, 30385], [22118, 23449], [22119, 26172], [22120,
                    39588], [22121, 29664], [22122, 26666], [22123, 34523], [22124, 26417], [22125, 29482], [22126, 35832], [22127, 35803], [22128, 36880], [22129, 31481], [22130, 28891], [22131, 29038], [22132, 25284], [22133, 30633], [22134, 22065], [22135, 20027], [22136, 33879], [22137, 26609], [22138, 21161], [22139, 34496], [22140, 36142], [22141, 38136], [22142, 31569], [22305, 20303], [22306, 27880], [22307, 31069], [22308, 39547], [22309, 25235], [22310, 29226], [22311, 25341], [22312, 19987], [22313, 30742], [22314, 36716], [22315, 25776], [22316, 36186], [22317, 31686], [22318,
                    26729], [22319, 24196], [22320, 35013], [22321, 22918], [22322, 25758], [22323, 22766], [22324, 29366], [22325, 26894], [22326, 38181], [22327, 36861], [22328, 36184], [22329, 22368], [22330, 32512], [22331, 35846], [22332, 20934], [22333, 25417], [22334, 25305], [22335, 21331], [22336, 26700], [22337, 29730], [22338, 33537], [22339, 37196], [22340, 21828], [22341, 30528], [22342, 28796], [22343, 27978], [22344, 20857], [22345, 21672], [22346, 36164], [22347, 23039], [22348, 28363], [22349, 28100], [22350, 23388], [22351, 32043], [22352, 20180], [22353, 31869], [22354,
                    28371], [22355, 23376], [22356, 33258], [22357, 28173], [22358, 23383], [22359, 39683], [22360, 26837], [22361, 36394], [22362, 23447], [22363, 32508], [22364, 24635], [22365, 32437], [22366, 37049], [22367, 36208], [22368, 22863], [22369, 25549], [22370, 31199], [22371, 36275], [22372, 21330], [22373, 26063], [22374, 31062], [22375, 35781], [22376, 38459], [22377, 32452], [22378, 38075], [22379, 32386], [22380, 22068], [22381, 37257], [22382, 26368], [22383, 32618], [22384, 23562], [22385, 36981], [22386, 26152], [22387, 24038], [22388, 20304], [22389, 26590], [22390,
                    20570], [22391, 20316], [22392, 22352], [22393, 24231], [22561, 20109], [22562, 19980], [22563, 20800], [22564, 19984], [22565, 24319], [22566, 21317], [22567, 19989], [22568, 20120], [22569, 19998], [22570, 39730], [22571, 23404], [22572, 22121], [22573, 20008], [22574, 31162], [22575, 20031], [22576, 21269], [22577, 20039], [22578, 22829], [22579, 29243], [22580, 21358], [22581, 27664], [22582, 22239], [22583, 32996], [22584, 39319], [22585, 27603], [22586, 30590], [22587, 40727], [22588, 20022], [22589, 20127], [22590, 40720], [22591, 20060], [22592, 20073], [22593,
                    20115], [22594, 33416], [22595, 23387], [22596, 21868], [22597, 22031], [22598, 20164], [22599, 21389], [22600, 21405], [22601, 21411], [22602, 21413], [22603, 21422], [22604, 38757], [22605, 36189], [22606, 21274], [22607, 21493], [22608, 21286], [22609, 21294], [22610, 21310], [22611, 36188], [22612, 21350], [22613, 21347], [22614, 20994], [22615, 21E3], [22616, 21006], [22617, 21037], [22618, 21043], [22619, 22620, 21055], [22621, 21068], [22622, 21086], [22623, 21089], [22624, 21084], [22625, 33967], [22626, 21117], [22627, 21122], [22628, 21121], [22629, 21136],
                [22630, 21139], [22631, 20866], [22632, 32596], [22633, 20155], [22634, 20163], [22635, 20169], [22636, 20162], [22637, 20200], [22638, 20193], [22639, 20203], [22640, 20190], [22641, 20251], [22642, 20211], [22643, 20258], [22644, 20324], [22645, 20213], [22646, 20261], [22647, 20263], [22648, 20233], [22649, 20267], [22650, 20318], [22651, 20327], [22652, 25912], [22653, 20314], [22654, 20317], [22817, 20319], [22818, 20311], [22819, 20274], [22820, 20285], [22821, 20342], [22822, 20340], [22823, 20369], [22824, 20361], [22825, 20355], [22826, 20367], [22827, 20350],
                [22828, 20347], [22829, 20394], [22830, 20348], [22831, 20396], [22832, 20372], [22833, 20454], [22834, 20456], [22835, 20458], [22836, 20421], [22837, 20442], [22838, 20451], [22839, 20444], [22840, 20433], [22841, 20447], [22842, 20472], [22843, 20521], [22844, 20556], [22845, 20467], [22846, 20524], [22847, 20495], [22848, 20526], [22849, 20525], [22850, 20478], [22851, 20508], [22852, 20492], [22853, 20517], [22854, 20520], [22855, 20606], [22856, 20547], [22857, 20565], [22858, 20552], [22859, 20558], [22860, 20588], [22861, 20603], [22862, 20645], [22863, 20647],
                [22864, 20649], [22865, 20666], [22866, 20694], [22867, 20742], [22868, 20717], [22869, 20716], [22870, 20710], [22871, 20718], [22872, 20743], [22873, 20747], [22874, 20189], [22875, 27709], [22876, 20312], [22877, 20325], [22878, 20430], [22879, 40864], [22880, 27718], [22881, 31860], [22882, 20846], [22883, 24061], [22884, 40649], [22885, 39320], [22886, 20865], [22887, 22804], [22888, 21241], [22889, 21261], [22890, 35335], [22891, 21264], [22892, 20971], [22893, 22809], [22894, 20821], [22895, 20128], [22896, 20822], [22897, 20147], [22898, 34926], [22899, 34980],
                [22900, 20149], [22901, 33044], [22902, 35026], [22903, 31104], [22904, 23348], [22905, 34819], [22906, 32696], [22907, 20907], [22908, 20913], [22909, 20925], [22910, 20924], [23073, 20935], [23074, 20886], [23075, 20898], [23076, 20901], [23077, 35744], [23078, 23079, 35750], [23080, 35754], [23081, 23082, 35764], [23083, 35767], [23084, 23085, 35778], [23086, 35787], [23087, 35791], [23088, 35790], [23089, 23091, 35794], [23092, 35798], [23093, 23094, 35800], [23095, 35804], [23096, 23097, 35807], [23098, 35812], [23099, 23100, 35816], [23101, 35822], [23102, 35824],
                [23103, 35827], [23104, 35830], [23105, 35833], [23106, 35836], [23107, 23108, 35839], [23109, 35842], [23110, 35844], [23111, 35847], [23112, 35852], [23113, 35855], [23114, 23115, 35857], [23116, 23118, 35860], [23119, 35865], [23120, 35867], [23121, 35864], [23122, 35869], [23123, 23125, 35871], [23126, 35877], [23127, 35879], [23128, 23129, 35882], [23130, 23131, 35886], [23132, 23133, 35890], [23134, 23135, 35893], [23136, 21353], [23137, 21370], [23138, 38429], [23139, 38434], [23140, 38433], [23141, 38449], [23142, 38442], [23143, 38461], [23144, 38460], [23145,
                    38466], [23146, 38473], [23147, 38484], [23148, 38495], [23149, 38503], [23150, 38508], [23151, 38514], [23152, 38516], [23153, 38536], [23154, 38541], [23155, 38551], [23156, 38576], [23157, 37015], [23158, 37019], [23159, 37021], [23160, 37017], [23161, 37036], [23162, 37025], [23163, 37044], [23164, 37043], [23165, 37046], [23166, 37050], [23329, 37048], [23330, 37040], [23331, 37071], [23332, 37061], [23333, 37054], [23334, 37072], [23335, 37060], [23336, 37063], [23337, 37075], [23338, 37094], [23339, 37090], [23340, 37084], [23341, 37079], [23342, 37083], [23343,
                    37099], [23344, 37103], [23345, 37118], [23346, 37124], [23347, 37154], [23348, 37150], [23349, 37155], [23350, 37169], [23351, 37167], [23352, 37177], [23353, 37187], [23354, 37190], [23355, 21005], [23356, 22850], [23357, 21154], [23358, 23359, 21164], [23360, 21182], [23361, 21759], [23362, 21200], [23363, 21206], [23364, 21232], [23365, 21471], [23366, 29166], [23367, 30669], [23368, 24308], [23369, 20981], [23370, 20988], [23371, 39727], [23372, 21430], [23373, 24321], [23374, 30042], [23375, 24047], [23376, 22348], [23377, 22441], [23378, 22433], [23379, 22654],
                [23380, 22716], [23381, 22725], [23382, 22737], [23383, 22313], [23384, 22316], [23385, 22314], [23386, 22323], [23387, 22329], [23388, 23389, 22318], [23390, 22364], [23391, 22331], [23392, 22338], [23393, 22377], [23394, 22405], [23395, 22379], [23396, 22406], [23397, 22396], [23398, 22395], [23399, 22376], [23400, 22381], [23401, 22390], [23402, 22387], [23403, 22445], [23404, 22436], [23405, 22412], [23406, 22450], [23407, 22479], [23408, 22439], [23409, 22452], [23410, 22419], [23411, 22432], [23412, 22485], [23413, 22488], [23414, 22490], [23415, 22489], [23416,
                    22482], [23417, 22456], [23418, 22516], [23419, 22511], [23420, 22520], [23421, 22500], [23422, 22493], [23585, 22539], [23586, 22541], [23587, 22525], [23588, 22509], [23589, 22528], [23590, 22558], [23591, 22553], [23592, 22596], [23593, 22560], [23594, 22629], [23595, 22636], [23596, 22657], [23597, 22665], [23598, 22682], [23599, 22656], [23600, 39336], [23601, 40729], [23602, 25087], [23603, 33401], [23604, 33405], [23605, 33407], [23606, 33423], [23607, 33418], [23608, 33448], [23609, 33412], [23610, 33422], [23611, 33425], [23612, 33431], [23613, 33433], [23614,
                    33451], [23615, 33464], [23616, 33470], [23617, 33456], [23618, 33480], [23619, 33482], [23620, 33507], [23621, 33432], [23622, 33463], [23623, 33454], [23624, 23625, 33483], [23626, 33473], [23627, 33449], [23628, 33460], [23629, 33441], [23630, 33450], [23631, 33439], [23632, 33476], [23633, 33486], [23634, 33444], [23635, 33505], [23636, 33545], [23637, 33527], [23638, 33508], [23639, 33551], [23640, 33543], [23641, 33500], [23642, 33524], [23643, 33490], [23644, 33496], [23645, 33548], [23646, 33531], [23647, 33491], [23648, 33553], [23649, 33562], [23650, 33542],
                [23651, 23652, 33556], [23653, 33504], [23654, 33493], [23655, 33564], [23656, 33617], [23657, 23658, 33627], [23659, 33544], [23660, 33682], [23661, 33596], [23662, 33588], [23663, 33585], [23664, 33691], [23665, 33630], [23666, 33583], [23667, 33615], [23668, 33607], [23669, 33603], [23670, 33631], [23671, 33600], [23672, 33559], [23673, 33632], [23674, 33581], [23675, 33594], [23676, 33587], [23677, 33638], [23678, 33637], [23841, 33640], [23842, 33563], [23843, 33641], [23844, 33644], [23845, 33642], [23846, 23847, 33645], [23848, 33712], [23849, 33656], [23850,
                    23851, 33715], [23852, 33696], [23853, 33706], [23854, 33683], [23855, 33692], [23856, 33669], [23857, 33660], [23858, 33718], [23859, 33705], [23860, 33661], [23861, 33720], [23862, 33659], [23863, 33688], [23864, 33694], [23865, 33704], [23866, 33722], [23867, 33724], [23868, 33729], [23869, 33793], [23870, 33765], [23871, 33752], [23872, 22535], [23873, 33816], [23874, 33803], [23875, 33757], [23876, 33789], [23877, 33750], [23878, 33820], [23879, 33848], [23880, 33809], [23881, 33798], [23882, 33748], [23883, 33759], [23884, 33807], [23885, 33795], [23886, 23887,
                    33784], [23888, 33770], [23889, 33733], [23890, 33728], [23891, 33830], [23892, 33776], [23893, 33761], [23894, 33884], [23895, 33873], [23896, 33882], [23897, 33881], [23898, 33907], [23899, 23900, 33927], [23901, 33914], [23902, 33929], [23903, 33912], [23904, 33852], [23905, 33862], [23906, 33897], [23907, 33910], [23908, 33932], [23909, 33934], [23910, 33841], [23911, 33901], [23912, 33985], [23913, 33997], [23914, 34E3], [23915, 34022], [23916, 33981], [23917, 34003], [23918, 33994], [23919, 33983], [23920, 33978], [23921, 34016], [23922, 33953], [23923, 33977],
                [23924, 33972], [23925, 33943], [23926, 34021], [23927, 34019], [23928, 34060], [23929, 29965], [23930, 34104], [23931, 34032], [23932, 34105], [23933, 34079], [23934, 34106], [24097, 34134], [24098, 34107], [24099, 34047], [24100, 34044], [24101, 34137], [24102, 34120], [24103, 34152], [24104, 34148], [24105, 34142], [24106, 34170], [24107, 30626], [24108, 34115], [24109, 34162], [24110, 34171], [24111, 34212], [24112, 34216], [24113, 34183], [24114, 34191], [24115, 34169], [24116, 34222], [24117, 34204], [24118, 34181], [24119, 34233], [24120, 34231], [24121, 34224],
                [24122, 34259], [24123, 34241], [24124, 34268], [24125, 34303], [24126, 34343], [24127, 34309], [24128, 34345], [24129, 34326], [24130, 34364], [24131, 24318], [24132, 24328], [24133, 22844], [24134, 22849], [24135, 32823], [24136, 22869], [24137, 22874], [24138, 22872], [24139, 21263], [24140, 23586], [24141, 23589], [24142, 23596], [24143, 23604], [24144, 25164], [24145, 25194], [24146, 25247], [24147, 25275], [24148, 25290], [24149, 25306], [24150, 25303], [24151, 25326], [24152, 25378], [24153, 25334], [24154, 25401], [24155, 25419], [24156, 25411], [24157, 25517],
                [24158, 25590], [24159, 25457], [24160, 25466], [24161, 25486], [24162, 25524], [24163, 25453], [24164, 25516], [24165, 25482], [24166, 25449], [24167, 25518], [24168, 25532], [24169, 25586], [24170, 25592], [24171, 25568], [24172, 25599], [24173, 25540], [24174, 25566], [24175, 25550], [24176, 25682], [24177, 25542], [24178, 25534], [24179, 25669], [24180, 25665], [24181, 25611], [24182, 25627], [24183, 25632], [24184, 25612], [24185, 25638], [24186, 25633], [24187, 25694], [24188, 25732], [24189, 25709], [24190, 25750], [24353, 25722], [24354, 24355, 25783], [24356,
                    25753], [24357, 25786], [24358, 25792], [24359, 25808], [24360, 25815], [24361, 25828], [24362, 25826], [24363, 25865], [24364, 25893], [24365, 25902], [24366, 24331], [24367, 24530], [24368, 29977], [24369, 24337], [24370, 21343], [24371, 21489], [24372, 21501], [24373, 21481], [24374, 21480], [24375, 21499], [24376, 21522], [24377, 21526], [24378, 21510], [24379, 21579], [24380, 24382, 21586], [24383, 21590], [24384, 21571], [24385, 21537], [24386, 21591], [24387, 21593], [24388, 21539], [24389, 21554], [24390, 21634], [24391, 21652], [24392, 21623], [24393, 21617],
                [24394, 21604], [24395, 24396, 21658], [24397, 21636], [24398, 21622], [24399, 21606], [24400, 21661], [24401, 21712], [24402, 21677], [24403, 21698], [24404, 21684], [24405, 21714], [24406, 21671], [24407, 21670], [24408, 24409, 21715], [24410, 21618], [24411, 21667], [24412, 21717], [24413, 21691], [24414, 21695], [24415, 21708], [24416, 24417, 21721], [24418, 21724], [24419, 24420, 21673], [24421, 21668], [24422, 21725], [24423, 21711], [24424, 21726], [24425, 21787], [24426, 21735], [24427, 21792], [24428, 21757], [24429, 21780], [24430, 21747], [24431, 24432, 21794],
                [24433, 21775], [24434, 21777], [24435, 21799], [24436, 21802], [24437, 21863], [24438, 21903], [24439, 21941], [24440, 21833], [24441, 21869], [24442, 21825], [24443, 21845], [24444, 21823], [24445, 21840], [24446, 21820], [24609, 21815], [24610, 21846], [24611, 24613, 21877], [24614, 21811], [24615, 21808], [24616, 21852], [24617, 21899], [24618, 21970], [24619, 21891], [24620, 21937], [24621, 21945], [24622, 21896], [24623, 21889], [24624, 21919], [24625, 21886], [24626, 21974], [24627, 21905], [24628, 21883], [24629, 21983], [24630, 24631, 21949], [24632, 21908],
                [24633, 21913], [24634, 21994], [24635, 22007], [24636, 21961], [24637, 22047], [24638, 21969], [24639, 24640, 21995], [24641, 21972], [24642, 21990], [24643, 21981], [24644, 21956], [24645, 21999], [24646, 21989], [24647, 24648, 22002], [24649, 24650, 21964], [24651, 21992], [24652, 22005], [24653, 21988], [24654, 36756], [24655, 22046], [24656, 22024], [24657, 22028], [24658, 22017], [24659, 22052], [24660, 22051], [24661, 22014], [24662, 22016], [24663, 22055], [24664, 22061], [24665, 22104], [24666, 22073], [24667, 22103], [24668, 22060], [24669, 22093], [24670,
                    22114], [24671, 22105], [24672, 22108], [24673, 22092], [24674, 22100], [24675, 22150], [24676, 22116], [24677, 22129], [24678, 22123], [24679, 24680, 22139], [24681, 22149], [24682, 22163], [24683, 22191], [24684, 22228], [24685, 22231], [24686, 22237], [24687, 22241], [24688, 22261], [24689, 22251], [24690, 22265], [24691, 22271], [24692, 22276], [24693, 22282], [24694, 22281], [24695, 22300], [24696, 24079], [24697, 24089], [24698, 24084], [24699, 24081], [24700, 24113], [24701, 24702, 24123], [24865, 24119], [24866, 24132], [24867, 24148], [24868, 24155], [24869,
                    24158], [24870, 24161], [24871, 23692], [24872, 23674], [24873, 23693], [24874, 23696], [24875, 23702], [24876, 23688], [24877, 24878, 23704], [24879, 23697], [24880, 23706], [24881, 23708], [24882, 23733], [24883, 23714], [24884, 23741], [24885, 23724], [24886, 23723], [24887, 23729], [24888, 23715], [24889, 23745], [24890, 23735], [24891, 23748], [24892, 23762], [24893, 23780], [24894, 23755], [24895, 23781], [24896, 24897, 23810], [24898, 23847], [24899, 23846], [24900, 23854], [24901, 23844], [24902, 23838], [24903, 23814], [24904, 23835], [24905, 23896], [24906,
                    23870], [24907, 23860], [24908, 23869], [24909, 23916], [24910, 23899], [24911, 23919], [24912, 23901], [24913, 23915], [24914, 23883], [24915, 23882], [24916, 23913], [24917, 23924], [24918, 23938], [24919, 23961], [24920, 23965], [24921, 35955], [24922, 23991], [24923, 24005], [24924, 24435], [24925, 24439], [24926, 24450], [24927, 24455], [24928, 24457], [24929, 24460], [24930, 24469], [24931, 24473], [24932, 24476], [24933, 24488], [24934, 24493], [24935, 24501], [24936, 24508], [24937, 34914], [24938, 24417], [24939, 29357], [24940, 29360], [24941, 29364], [24942,
                    24943, 29367], [24944, 29379], [24945, 29377], [24946, 29390], [24947, 29389], [24948, 29394], [24949, 29416], [24950, 29423], [24951, 29417], [24952, 29426], [24953, 29428], [24954, 29431], [24955, 29441], [24956, 29427], [24957, 29443], [24958, 29434], [25121, 29435], [25122, 29463], [25123, 29459], [25124, 29473], [25125, 29450], [25126, 29470], [25127, 29469], [25128, 29461], [25129, 29474], [25130, 29497], [25131, 29477], [25132, 29484], [25133, 29496], [25134, 29489], [25135, 29520], [25136, 29517], [25137, 29527], [25138, 29536], [25139, 29548], [25140, 29551],
                [25141, 29566], [25142, 33307], [25143, 22821], [25144, 39143], [25145, 22820], [25146, 22786], [25147, 39267], [25148, 25153, 39271], [25154, 39284], [25155, 39287], [25156, 39293], [25157, 39296], [25158, 39300], [25159, 39303], [25160, 39306], [25161, 39309], [25162, 25163, 39312], [25164, 25166, 39315], [25167, 24192], [25168, 24209], [25169, 24203], [25170, 24214], [25171, 24229], [25172, 24224], [25173, 24249], [25174, 24245], [25175, 24254], [25176, 24243], [25177, 36179], [25178, 24274], [25179, 24273], [25180, 24283], [25181, 24296], [25182, 24298], [25183,
                    33210], [25184, 24516], [25185, 24521], [25186, 24534], [25187, 24527], [25188, 24579], [25189, 24558], [25190, 24580], [25191, 24545], [25192, 24548], [25193, 24574], [25194, 25195, 24581], [25196, 24554], [25197, 24557], [25198, 24568], [25199, 24601], [25200, 24629], [25201, 24614], [25202, 24603], [25203, 24591], [25204, 24589], [25205, 24617], [25206, 24619], [25207, 24586], [25208, 24639], [25209, 24609], [25210, 25211, 24696], [25212, 24699], [25213, 24698], [25214, 24642], [25377, 24682], [25378, 24701], [25379, 24726], [25380, 24730], [25381, 24749], [25382,
                    24733], [25383, 24707], [25384, 24722], [25385, 24716], [25386, 24731], [25387, 24812], [25388, 24763], [25389, 24753], [25390, 24797], [25391, 24792], [25392, 24774], [25393, 24794], [25394, 24756], [25395, 24864], [25396, 24870], [25397, 24853], [25398, 24867], [25399, 24820], [25400, 24832], [25401, 24846], [25402, 24875], [25403, 24906], [25404, 24949], [25405, 25004], [25406, 24980], [25407, 24999], [25408, 25015], [25409, 25044], [25410, 25077], [25411, 24541], [25412, 38579], [25413, 38377], [25414, 38379], [25415, 38385], [25416, 38387], [25417, 25418, 38389],
                [25419, 38396], [25420, 38398], [25421, 25422, 38403], [25423, 38406], [25424, 38408], [25425, 25428, 38410], [25429, 38415], [25430, 38418], [25431, 25433, 38421], [25434, 25435, 38425], [25436, 20012], [25437, 29247], [25438, 25109], [25439, 27701], [25440, 27732], [25441, 27740], [25442, 27722], [25443, 27811], [25444, 27781], [25445, 27792], [25446, 27796], [25447, 27788], [25448, 25449, 27752], [25450, 27764], [25451, 27766], [25452, 27782], [25453, 27817], [25454, 27856], [25455, 27860], [25456, 27821], [25457, 25458, 27895], [25459, 27889], [25460, 27863], [25461,
                    27826], [25462, 27872], [25463, 27862], [25464, 27898], [25465, 27883], [25466, 27886], [25467, 27825], [25468, 27859], [25469, 27887], [25470, 27902], [25633, 27961], [25634, 27943], [25635, 27916], [25636, 27971], [25637, 27976], [25638, 27911], [25639, 27908], [25640, 27929], [25641, 27918], [25642, 27947], [25643, 27981], [25644, 27950], [25645, 27957], [25646, 27930], [25647, 27983], [25648, 27986], [25649, 27988], [25650, 27955], [25651, 28049], [25652, 28015], [25653, 28062], [25654, 28064], [25655, 27998], [25656, 25657, 28051], [25658, 27996], [25659, 28E3],
                [25660, 28028], [25661, 28003], [25662, 28186], [25663, 28103], [25664, 28101], [25665, 28126], [25666, 28174], [25667, 28095], [25668, 28128], [25669, 28177], [25670, 28134], [25671, 28125], [25672, 28121], [25673, 28182], [25674, 28075], [25675, 28172], [25676, 28078], [25677, 28203], [25678, 28270], [25679, 28238], [25680, 28267], [25681, 28338], [25682, 28255], [25683, 28294], [25684, 25685, 28243], [25686, 28210], [25687, 28197], [25688, 28228], [25689, 28383], [25690, 28337], [25691, 28312], [25692, 28384], [25693, 28461], [25694, 28386], [25695, 28325], [25696,
                    28327], [25697, 28349], [25698, 28347], [25699, 28343], [25700, 28375], [25701, 28340], [25702, 28367], [25703, 28303], [25704, 28354], [25705, 28319], [25706, 28514], [25707, 25708, 28486], [25709, 28452], [25710, 28437], [25711, 28409], [25712, 28463], [25713, 28470], [25714, 28491], [25715, 28532], [25716, 28458], [25717, 28425], [25718, 28457], [25719, 28553], [25720, 28557], [25721, 28556], [25722, 28536], [25723, 28530], [25724, 28540], [25725, 28538], [25726, 28625], [25889, 28617], [25890, 28583], [25891, 28601], [25892, 28598], [25893, 28610], [25894, 28641],
                [25895, 28654], [25896, 28638], [25897, 28640], [25898, 28655], [25899, 28698], [25900, 28707], [25901, 28699], [25902, 28729], [25903, 28725], [25904, 28751], [25905, 28766], [25906, 23424], [25907, 23428], [25908, 23445], [25909, 23443], [25910, 23461], [25911, 23480], [25912, 29999], [25913, 39582], [25914, 25652], [25915, 23524], [25916, 23534], [25917, 35120], [25918, 23536], [25919, 36423], [25920, 35591], [25921, 36790], [25922, 36819], [25923, 36821], [25924, 36837], [25925, 36846], [25926, 36836], [25927, 36841], [25928, 36838], [25929, 36851], [25930, 36840],
                [25931, 36869], [25932, 36868], [25933, 36875], [25934, 36902], [25935, 36881], [25936, 36877], [25937, 36886], [25938, 36897], [25939, 25940, 36917], [25941, 36909], [25942, 36911], [25943, 36932], [25944, 25945, 36945], [25946, 36944], [25947, 36968], [25948, 36952], [25949, 36962], [25950, 36955], [25951, 26297], [25952, 36980], [25953, 36989], [25954, 36994], [25955, 37E3], [25956, 36995], [25957, 37003], [25958, 24400], [25959, 24407], [25960, 24406], [25961, 24408], [25962, 23611], [25963, 21675], [25964, 23632], [25965, 23641], [25966, 23409], [25967, 23651],
                [25968, 23654], [25969, 32700], [25970, 24362], [25971, 24361], [25972, 24365], [25973, 33396], [25974, 24380], [25975, 39739], [25976, 23662], [25977, 22913], [25978, 22915], [25979, 22925], [25980, 25981, 22953], [25982, 22947], [26145, 22935], [26146, 22986], [26147, 22955], [26148, 22942], [26149, 22948], [26150, 22994], [26151, 22962], [26152, 22959], [26153, 22999], [26154, 22974], [26155, 26156, 23045], [26157, 23005], [26158, 23048], [26159, 23011], [26160, 23E3], [26161, 23033], [26162, 23052], [26163, 23049], [26164, 23090], [26165, 23092], [26166, 23057],
                [26167, 23075], [26168, 23059], [26169, 23104], [26170, 23143], [26171, 23114], [26172, 23125], [26173, 23100], [26174, 23138], [26175, 23157], [26176, 33004], [26177, 23210], [26178, 23195], [26179, 23159], [26180, 23162], [26181, 23230], [26182, 23275], [26183, 23218], [26184, 23250], [26185, 23252], [26186, 23224], [26187, 23264], [26188, 23267], [26189, 23281], [26190, 23254], [26191, 23270], [26192, 23256], [26193, 23260], [26194, 23305], [26195, 23319], [26196, 23318], [26197, 23346], [26198, 23351], [26199, 23360], [26200, 23573], [26201, 23580], [26202, 23386],
                [26203, 23397], [26204, 23411], [26205, 23377], [26206, 23379], [26207, 23394], [26208, 39541], [26209, 26210, 39543], [26211, 39546], [26212, 39551], [26213, 39549], [26214, 26215, 39552], [26216, 39557], [26217, 39560], [26218, 39562], [26219, 39568], [26220, 26221, 39570], [26222, 39574], [26223, 39576], [26224, 26226, 39579], [26227, 26228, 39583], [26229, 26230, 39586], [26231, 39589], [26232, 39591], [26233, 32415], [26234, 32417], [26235, 32419], [26236, 32421], [26237, 26238, 32424], [26401, 32429], [26402, 32432], [26403, 32446], [26404, 26406, 32448], [26407,
                    32457], [26408, 26409, 32459], [26410, 32464], [26411, 32468], [26412, 32471], [26413, 32475], [26414, 26415, 32480], [26416, 32488], [26417, 32491], [26418, 26419, 32494], [26420, 26421, 32497], [26422, 32525], [26423, 32502], [26424, 26425, 32506], [26426, 32510], [26427, 26429, 32513], [26430, 26431, 32519], [26432, 26433, 32523], [26434, 32527], [26435, 26436, 32529], [26437, 32535], [26438, 32537], [26439, 32540], [26440, 32539], [26441, 32543], [26442, 26448, 32545], [26449, 26452, 32554], [26453, 26457, 32559], [26458, 32565], [26459, 24186], [26460, 30079], [26461,
                    24027], [26462, 30014], [26463, 37013], [26464, 29582], [26465, 29585], [26466, 29614], [26467, 29602], [26468, 29599], [26469, 29647], [26470, 29634], [26471, 29649], [26472, 29623], [26473, 29619], [26474, 29632], [26475, 29641], [26476, 29640], [26477, 29669], [26478, 29657], [26479, 39036], [26480, 29706], [26481, 29673], [26482, 29671], [26483, 29662], [26484, 29626], [26485, 29682], [26486, 29711], [26487, 29738], [26488, 29787], [26489, 29734], [26490, 29733], [26491, 29736], [26492, 29744], [26493, 29742], [26494, 29740], [26657, 29723], [26658, 29722], [26659,
                    29761], [26660, 29788], [26661, 29783], [26662, 29781], [26663, 29785], [26664, 29815], [26665, 29805], [26666, 29822], [26667, 29852], [26668, 29838], [26669, 26670, 29824], [26671, 29831], [26672, 29835], [26673, 29854], [26674, 26675, 29864], [26676, 29840], [26677, 29863], [26678, 29906], [26679, 29882], [26680, 26682, 38890], [26683, 26444], [26684, 26451], [26685, 26462], [26686, 26440], [26687, 26473], [26688, 26533], [26689, 26503], [26690, 26474], [26691, 26483], [26692, 26520], [26693, 26535], [26694, 26485], [26695, 26536], [26696, 26526], [26697, 26541],
                [26698, 26507], [26699, 26487], [26700, 26492], [26701, 26608], [26702, 26633], [26703, 26584], [26704, 26634], [26705, 26601], [26706, 26544], [26707, 26636], [26708, 26585], [26709, 26549], [26710, 26586], [26711, 26547], [26712, 26589], [26713, 26624], [26714, 26563], [26715, 26552], [26716, 26594], [26717, 26638], [26718, 26561], [26719, 26621], [26720, 26721, 26674], [26722, 26723, 26720], [26724, 26702], [26725, 26722], [26726, 26692], [26727, 26724], [26728, 26755], [26729, 26653], [26730, 26709], [26731, 26726], [26732, 26689], [26733, 26727], [26734, 26688],
                [26735, 26686], [26736, 26698], [26737, 26697], [26738, 26665], [26739, 26805], [26740, 26767], [26741, 26740], [26742, 26743], [26743, 26771], [26744, 26731], [26745, 26818], [26746, 26990], [26747, 26876], [26748, 26749, 26911], [26750, 26873], [26913, 26916], [26914, 26864], [26915, 26891], [26916, 26881], [26917, 26967], [26918, 26851], [26919, 26896], [26920, 26993], [26921, 26937], [26922, 26976], [26923, 26946], [26924, 26973], [26925, 27012], [26926, 26987], [26927, 27008], [26928, 27032], [26929, 27E3], [26930, 26932], [26931, 27084], [26932, 26933, 27015],
                [26934, 27086], [26935, 27017], [26936, 26982], [26937, 26979], [26938, 27001], [26939, 27035], [26940, 27047], [26941, 27067], [26942, 27051], [26943, 27053], [26944, 27092], [26945, 27057], [26946, 27073], [26947, 27082], [26948, 27103], [26949, 27029], [26950, 27104], [26951, 27021], [26952, 27135], [26953, 27183], [26954, 27117], [26955, 26956, 27159], [26957, 27237], [26958, 27122], [26959, 27204], [26960, 27198], [26961, 27296], [26962, 27216], [26963, 27227], [26964, 27189], [26965, 27278], [26966, 27257], [26967, 27197], [26968, 27176], [26969, 27224], [26970,
                    27260], [26971, 27281], [26972, 27280], [26973, 27305], [26974, 27287], [26975, 27307], [26976, 29495], [26977, 29522], [26978, 26979, 27521], [26980, 27527], [26981, 27524], [26982, 26983, 27538], [26984, 27533], [26985, 26986, 27546], [26987, 27553], [26988, 27562], [26989, 36715], [26990, 36717], [26991, 26993, 36721], [26994, 26995, 36725], [26996, 36728], [26997, 36727], [26998, 26999, 36729], [27E3, 36732], [27001, 36734], [27002, 27003, 36737], [27004, 36740], [27005, 36743], [27006, 36747], [27169, 27171, 36749], [27172, 36760], [27173, 36762], [27174, 36558],
                [27175, 25099], [27176, 25111], [27177, 25115], [27178, 25119], [27179, 25122], [27180, 25121], [27181, 25125], [27182, 25124], [27183, 25132], [27184, 33255], [27185, 29935], [27186, 29940], [27187, 29951], [27188, 29967], [27189, 29969], [27190, 29971], [27191, 25908], [27192, 27194, 26094], [27195, 26122], [27196, 26137], [27197, 26482], [27198, 26115], [27199, 26133], [27200, 26112], [27201, 28805], [27202, 26359], [27203, 26141], [27204, 26164], [27205, 26161], [27206, 26166], [27207, 26165], [27208, 32774], [27209, 26207], [27210, 26196], [27211, 26177], [27212,
                    26191], [27213, 26198], [27214, 26209], [27215, 26199], [27216, 26231], [27217, 26244], [27218, 26252], [27219, 26279], [27220, 26269], [27221, 26302], [27222, 27223, 26331], [27224, 26342], [27225, 26345], [27226, 27227, 36146], [27228, 36150], [27229, 36155], [27230, 36157], [27231, 36160], [27232, 27233, 36165], [27234, 27235, 36168], [27236, 36167], [27237, 36173], [27238, 36181], [27239, 36185], [27240, 35271], [27241, 27243, 35274], [27244, 27247, 35278], [27248, 29294], [27249, 29343], [27250, 29277], [27251, 29286], [27252, 29295], [27253, 27254, 29310], [27255,
                    29316], [27256, 29323], [27257, 29325], [27258, 29327], [27259, 29330], [27260, 25352], [27261, 25394], [27262, 25520], [27425, 25663], [27426, 25816], [27427, 32772], [27428, 27626], [27429, 27635], [27430, 27645], [27431, 27637], [27432, 27641], [27433, 27653], [27434, 27655], [27435, 27654], [27436, 27661], [27437, 27669], [27438, 27440, 27672], [27441, 27681], [27442, 27689], [27443, 27684], [27444, 27690], [27445, 27698], [27446, 25909], [27447, 25941], [27448, 25963], [27449, 29261], [27450, 29266], [27451, 29270], [27452, 29232], [27453, 34402], [27454, 21014],
                [27455, 32927], [27456, 32924], [27457, 32915], [27458, 32956], [27459, 26378], [27460, 32957], [27461, 32945], [27462, 32939], [27463, 32941], [27464, 32948], [27465, 32951], [27466, 27469, 32999], [27470, 32987], [27471, 32962], [27472, 32964], [27473, 32985], [27474, 32973], [27475, 32983], [27476, 26384], [27477, 32989], [27478, 33003], [27479, 33009], [27480, 33012], [27481, 33005], [27482, 27483, 33037], [27484, 33010], [27485, 33020], [27486, 26389], [27487, 33042], [27488, 35930], [27489, 33078], [27490, 33054], [27491, 33068], [27492, 33048], [27493, 33074],
                [27494, 33096], [27495, 33100], [27496, 33107], [27497, 33140], [27498, 27499, 33113], [27500, 33137], [27501, 33120], [27502, 33129], [27503, 27504, 33148], [27505, 33133], [27506, 33127], [27507, 22605], [27508, 23221], [27509, 33160], [27510, 33154], [27511, 33169], [27512, 28373], [27513, 33187], [27514, 33194], [27515, 33228], [27516, 26406], [27517, 33226], [27518, 33211], [27681, 33217], [27682, 33190], [27683, 27428], [27684, 27447], [27685, 27449], [27686, 27459], [27687, 27462], [27688, 27481], [27689, 27691, 39121], [27692, 39125], [27693, 27694, 39129], [27695,
                    27571], [27696, 24384], [27697, 27586], [27698, 35315], [27699, 26E3], [27700, 40785], [27701, 26003], [27702, 26044], [27703, 26054], [27704, 26052], [27705, 26051], [27706, 26060], [27707, 26062], [27708, 26066], [27709, 26070], [27710, 28800], [27711, 28828], [27712, 28822], [27713, 28829], [27714, 28859], [27715, 28864], [27716, 28855], [27717, 28843], [27718, 28849], [27719, 28904], [27720, 28874], [27721, 28944], [27722, 28947], [27723, 28950], [27724, 28975], [27725, 28977], [27726, 29043], [27727, 29020], [27728, 29032], [27729, 28997], [27730, 29042], [27731,
                    29002], [27732, 29048], [27733, 29050], [27734, 29080], [27735, 29107], [27736, 29109], [27737, 29096], [27738, 29088], [27739, 29152], [27740, 29140], [27741, 29159], [27742, 29177], [27743, 29213], [27744, 29224], [27745, 28780], [27746, 28952], [27747, 29030], [27748, 29113], [27749, 25150], [27750, 25149], [27751, 25155], [27752, 27753, 25160], [27754, 31035], [27755, 31040], [27756, 31046], [27757, 31049], [27758, 27759, 31067], [27760, 31059], [27761, 31066], [27762, 31074], [27763, 31063], [27764, 31072], [27765, 31087], [27766, 31079], [27767, 31098], [27768,
                    31109], [27769, 31114], [27770, 31130], [27771, 31143], [27772, 31155], [27773, 24529], [27774, 24528], [27937, 24636], [27938, 24669], [27939, 24666], [27940, 24679], [27941, 24641], [27942, 24665], [27943, 24675], [27944, 24747], [27945, 24838], [27946, 24845], [27947, 24925], [27948, 25001], [27949, 24989], [27950, 25035], [27951, 25041], [27952, 25094], [27953, 32896], [27954, 32895], [27955, 27795], [27956, 27894], [27957, 28156], [27958, 30710], [27959, 30712], [27960, 30720], [27961, 30729], [27962, 27963, 30743], [27964, 30737], [27965, 26027], [27966, 30765],
                [27967, 27968, 30748], [27969, 27971, 30777], [27972, 30751], [27973, 30780], [27974, 30757], [27975, 30764], [27976, 30755], [27977, 30761], [27978, 30798], [27979, 30829], [27980, 27981, 30806], [27982, 30758], [27983, 30800], [27984, 30791], [27985, 30796], [27986, 30826], [27987, 30875], [27988, 30867], [27989, 30874], [27990, 30855], [27991, 30876], [27992, 30881], [27993, 30883], [27994, 30898], [27995, 30905], [27996, 30885], [27997, 30932], [27998, 30937], [27999, 30921], [28E3, 30956], [28001, 30962], [28002, 30981], [28003, 30964], [28004, 30995], [28005, 31012],
                [28006, 31006], [28007, 31028], [28008, 40859], [28009, 40697], [28010, 28011, 40699], [28012, 30449], [28013, 30468], [28014, 30477], [28015, 30457], [28016, 28017, 30471], [28018, 30490], [28019, 30498], [28020, 30489], [28021, 30509], [28022, 30502], [28023, 30517], [28024, 30520], [28025, 28026, 30544], [28027, 30535], [28028, 30531], [28029, 30554], [28030, 30568], [28193, 30562], [28194, 30565], [28195, 30591], [28196, 30605], [28197, 30589], [28198, 30592], [28199, 30604], [28200, 30609], [28201, 28202, 30623], [28203, 30640], [28204, 30645], [28205, 30653], [28206,
                    30010], [28207, 30016], [28208, 30030], [28209, 30027], [28210, 30024], [28211, 30043], [28212, 30066], [28213, 30073], [28214, 30083], [28215, 32600], [28216, 32609], [28217, 32607], [28218, 35400], [28219, 32616], [28220, 32628], [28221, 32625], [28222, 32633], [28223, 32641], [28224, 32638], [28225, 30413], [28226, 30437], [28227, 34866], [28228, 28230, 38021], [28231, 38027], [28232, 38026], [28233, 28234, 38028], [28235, 28236, 38031], [28237, 38036], [28238, 38039], [28239, 38037], [28240, 28242, 38042], [28243, 28244, 38051], [28245, 38059], [28246, 38058], [28247,
                    38061], [28248, 38060], [28249, 28250, 38063], [28251, 38066], [28252, 38068], [28253, 28257, 38070], [28258, 28259, 38076], [28260, 38079], [28261, 38084], [28262, 28268, 38088], [28269, 28271, 38096], [28272, 28274, 38101], [28275, 38105], [28276, 38104], [28277, 38107], [28278, 28280, 38110], [28281, 38114], [28282, 28283, 38116], [28284, 28285, 38119], [28286, 38122], [28449, 38121], [28450, 38123], [28451, 28452, 38126], [28453, 28455, 38131], [28456, 38135], [28457, 38137], [28458, 28459, 38140], [28460, 38143], [28461, 38147], [28462, 38146], [28463, 28464, 38150],
                [28465, 28466, 38153], [28467, 28469, 38157], [28470, 28474, 38162], [28475, 38168], [28476, 38171], [28477, 28479, 38173], [28480, 38178], [28481, 28482, 38186], [28483, 38185], [28484, 38188], [28485, 28486, 38193], [28487, 38196], [28488, 28490, 38198], [28491, 38204], [28492, 28493, 38206], [28494, 38210], [28495, 38197], [28496, 28498, 38212], [28499, 38217], [28500, 38220], [28501, 28502, 38222], [28503, 28505, 38226], [28506, 28509, 38230], [28510, 38235], [28511, 28512, 38238], [28513, 38237], [28514, 28515, 38241], [28516, 28524, 38244], [28525, 38255], [28526,
                    28528, 38257], [28529, 38202], [28530, 30695], [28531, 30700], [28532, 38601], [28533, 31189], [28534, 31213], [28535, 31203], [28536, 31211], [28537, 31238], [28538, 23879], [28539, 31235], [28540, 31234], [28541, 31262], [28542, 31252], [28705, 31289], [28706, 31287], [28707, 31313], [28708, 40655], [28709, 39333], [28710, 31344], [28711, 30344], [28712, 30350], [28713, 30355], [28714, 30361], [28715, 30372], [28716, 29918], [28717, 29920], [28718, 29996], [28719, 40480], [28720, 40482], [28721, 28725, 40488], [28726, 40498], [28727, 40497], [28728, 40502], [28729,
                    40504], [28730, 40503], [28731, 28732, 40505], [28733, 40510], [28734, 28735, 40513], [28736, 40516], [28737, 28740, 40518], [28741, 28742, 40523], [28743, 40526], [28744, 40529], [28745, 40533], [28746, 40535], [28747, 28749, 40538], [28750, 40542], [28751, 40547], [28752, 28758, 40550], [28759, 40561], [28760, 40557], [28761, 40563], [28762, 30098], [28763, 30100], [28764, 30102], [28765, 30112], [28766, 30109], [28767, 30124], [28768, 30115], [28769, 28770, 30131], [28771, 30136], [28772, 30148], [28773, 30129], [28774, 30128], [28775, 30147], [28776, 30146], [28777,
                    30166], [28778, 30157], [28779, 30179], [28780, 30184], [28781, 30182], [28782, 30180], [28783, 30187], [28784, 30183], [28785, 30211], [28786, 30193], [28787, 30204], [28788, 30207], [28789, 30224], [28790, 30208], [28791, 30213], [28792, 30220], [28793, 30231], [28794, 30218], [28795, 30245], [28796, 30232], [28797, 30229], [28798, 30233], [28961, 30235], [28962, 30268], [28963, 30242], [28964, 30240], [28965, 30272], [28966, 30253], [28967, 30256], [28968, 30271], [28969, 30261], [28970, 30275], [28971, 30270], [28972, 30259], [28973, 30285], [28974, 30302], [28975,
                    30292], [28976, 30300], [28977, 30294], [28978, 30315], [28979, 30319], [28980, 32714], [28981, 31462], [28982, 28983, 31352], [28984, 31360], [28985, 31366], [28986, 31368], [28987, 31381], [28988, 31398], [28989, 31392], [28990, 31404], [28991, 31400], [28992, 31405], [28993, 31411], [28994, 34916], [28995, 34921], [28996, 34930], [28997, 34941], [28998, 34943], [28999, 34946], [29E3, 34978], [29001, 35014], [29002, 34999], [29003, 35004], [29004, 35017], [29005, 35042], [29006, 35022], [29007, 35043], [29008, 35045], [29009, 35057], [29010, 35098], [29011, 35068],
                [29012, 35048], [29013, 35070], [29014, 35056], [29015, 35105], [29016, 35097], [29017, 35091], [29018, 35099], [29019, 35082], [29020, 35124], [29021, 35115], [29022, 35126], [29023, 35137], [29024, 35174], [29025, 35195], [29026, 30091], [29027, 32997], [29028, 30386], [29029, 30388], [29030, 30684], [29031, 32786], [29032, 32788], [29033, 32790], [29034, 32796], [29035, 32800], [29036, 32802], [29037, 29039, 32805], [29040, 32809], [29041, 32808], [29042, 32817], [29043, 32779], [29044, 32821], [29045, 32835], [29046, 32838], [29047, 32845], [29048, 32850], [29049,
                    32873], [29050, 32881], [29051, 35203], [29052, 39032], [29053, 39040], [29054, 39043], [29217, 39049], [29218, 29219, 39052], [29220, 39055], [29221, 39060], [29222, 29223, 39066], [29224, 29225, 39070], [29226, 29227, 39073], [29228, 29229, 39077], [29230, 34381], [29231, 34388], [29232, 34412], [29233, 34414], [29234, 34431], [29235, 34426], [29236, 34428], [29237, 34427], [29238, 34472], [29239, 34445], [29240, 34443], [29241, 34476], [29242, 34461], [29243, 34471], [29244, 34467], [29245, 34474], [29246, 34451], [29247, 34473], [29248, 34486], [29249, 34500], [29250,
                    34485], [29251, 34510], [29252, 34480], [29253, 34490], [29254, 34481], [29255, 34479], [29256, 34505], [29257, 34511], [29258, 34484], [29259, 34537], [29260, 29261, 34545], [29262, 34541], [29263, 34547], [29264, 34512], [29265, 34579], [29266, 34526], [29267, 34548], [29268, 34527], [29269, 34520], [29270, 34513], [29271, 34563], [29272, 34567], [29273, 34552], [29274, 34568], [29275, 34570], [29276, 34573], [29277, 34569], [29278, 34595], [29279, 34619], [29280, 34590], [29281, 34597], [29282, 34606], [29283, 34586], [29284, 34622], [29285, 34632], [29286, 34612],
                [29287, 34609], [29288, 34601], [29289, 34615], [29290, 34623], [29291, 34690], [29292, 34594], [29293, 29294, 34685], [29295, 34683], [29296, 34656], [29297, 34672], [29298, 34636], [29299, 34670], [29300, 34699], [29301, 34643], [29302, 34659], [29303, 34684], [29304, 34660], [29305, 34649], [29306, 34661], [29307, 34707], [29308, 34735], [29309, 34728], [29310, 34770], [29473, 34758], [29474, 34696], [29475, 34693], [29476, 34733], [29477, 34711], [29478, 34691], [29479, 34731], [29480, 34789], [29481, 34732], [29482, 34741], [29483, 34739], [29484, 34763], [29485,
                    34771], [29486, 34749], [29487, 34769], [29488, 34752], [29489, 34762], [29490, 34779], [29491, 34794], [29492, 34784], [29493, 34798], [29494, 34838], [29495, 34835], [29496, 34814], [29497, 34826], [29498, 34843], [29499, 34849], [29500, 34873], [29501, 34876], [29502, 32566], [29503, 32578], [29504, 29505, 32580], [29506, 33296], [29507, 31482], [29508, 31485], [29509, 31496], [29510, 29511, 31491], [29512, 31509], [29513, 31498], [29514, 31531], [29515, 31503], [29516, 31559], [29517, 31544], [29518, 31530], [29519, 31513], [29520, 31534], [29521, 31537], [29522,
                    31520], [29523, 31525], [29524, 31524], [29525, 31539], [29526, 31550], [29527, 31518], [29528, 31576], [29529, 31578], [29530, 31557], [29531, 31605], [29532, 31564], [29533, 31581], [29534, 31584], [29535, 31598], [29536, 31611], [29537, 31586], [29538, 31602], [29539, 31601], [29540, 31632], [29541, 29542, 31654], [29543, 31672], [29544, 31660], [29545, 31645], [29546, 31656], [29547, 31621], [29548, 31658], [29549, 31644], [29550, 31650], [29551, 31659], [29552, 31668], [29553, 31697], [29554, 31681], [29555, 31692], [29556, 31709], [29557, 31706], [29558, 29559,
                    31717], [29560, 31722], [29561, 31756], [29562, 31742], [29563, 31740], [29564, 31759], [29565, 31766], [29566, 31755], [29729, 31775], [29730, 31786], [29731, 31782], [29732, 31800], [29733, 31809], [29734, 31808], [29735, 33278], [29736, 29737, 33281], [29738, 33284], [29739, 33260], [29740, 34884], [29741, 29743, 33313], [29744, 33325], [29745, 33327], [29746, 33320], [29747, 33323], [29748, 33336], [29749, 33339], [29750, 29751, 33331], [29752, 33342], [29753, 33348], [29754, 33353], [29755, 33355], [29756, 33359], [29757, 33370], [29758, 33375], [29759, 33384],
                [29760, 34942], [29761, 34949], [29762, 34952], [29763, 35032], [29764, 35039], [29765, 35166], [29766, 32669], [29767, 32671], [29768, 32679], [29769, 29770, 32687], [29771, 32690], [29772, 31868], [29773, 25929], [29774, 31889], [29775, 31901], [29776, 31900], [29777, 31902], [29778, 31906], [29779, 31922], [29780, 29781, 31932], [29782, 31937], [29783, 31943], [29784, 29785, 31948], [29786, 31944], [29787, 31941], [29788, 31959], [29789, 31976], [29790, 33390], [29791, 26280], [29792, 32703], [29793, 32718], [29794, 32725], [29795, 32741], [29796, 32737], [29797,
                    32742], [29798, 32745], [29799, 32750], [29800, 32755], [29801, 31992], [29802, 32119], [29803, 32166], [29804, 32174], [29805, 32327], [29806, 32411], [29807, 40632], [29808, 40628], [29809, 36211], [29810, 36228], [29811, 36244], [29812, 36241], [29813, 36273], [29814, 36199], [29815, 36205], [29816, 35911], [29817, 35913], [29818, 37194], [29819, 37200], [29820, 29821, 37198], [29822, 37220], [29985, 37218], [29986, 37217], [29987, 37232], [29988, 37225], [29989, 37231], [29990, 29991, 37245], [29992, 37234], [29993, 37236], [29994, 37241], [29995, 37260], [29996,
                    37253], [29997, 37264], [29998, 37261], [29999, 37265], [3E4, 30001, 37282], [30002, 37290], [30003, 30005, 37293], [30006, 37301], [30007, 37300], [30008, 37306], [30009, 35925], [30010, 40574], [30011, 36280], [30012, 36331], [30013, 36357], [30014, 36441], [30015, 36457], [30016, 36277], [30017, 36287], [30018, 36284], [30019, 36282], [30020, 36292], [30021, 30022, 36310], [30023, 36314], [30024, 36318], [30025, 30026, 36302], [30027, 36315], [30028, 36294], [30029, 36332], [30030, 30031, 36343], [30032, 36323], [30033, 36345], [30034, 36347], [30035, 36324], [30036,
                    36361], [30037, 36349], [30038, 36372], [30039, 36381], [30040, 36383], [30041, 36396], [30042, 36398], [30043, 36387], [30044, 36399], [30045, 36410], [30046, 36416], [30047, 36409], [30048, 36405], [30049, 36413], [30050, 36401], [30051, 36425], [30052, 30053, 36417], [30054, 30055, 36433], [30056, 36426], [30057, 36464], [30058, 36470], [30059, 36476], [30060, 36463], [30061, 36468], [30062, 36485], [30063, 36495], [30064, 36500], [30065, 36496], [30066, 36508], [30067, 36510], [30068, 35960], [30069, 35970], [30070, 35978], [30071, 35973], [30072, 35992], [30073,
                    35988], [30074, 26011], [30075, 35286], [30076, 35294], [30077, 35290], [30078, 35292], [30241, 35301], [30242, 35307], [30243, 35311], [30244, 35390], [30245, 35622], [30246, 38739], [30247, 38633], [30248, 38643], [30249, 38639], [30250, 38662], [30251, 38657], [30252, 38664], [30253, 38671], [30254, 38670], [30255, 38698], [30256, 38701], [30257, 38704], [30258, 38718], [30259, 40832], [30260, 40835], [30261, 30266, 40837], [30267, 40844], [30268, 40702], [30269, 40715], [30270, 40717], [30271, 38585], [30272, 30273, 38588], [30274, 38606], [30275, 38610], [30276,
                    30655], [30277, 38624], [30278, 37518], [30279, 37550], [30280, 37576], [30281, 37694], [30282, 37738], [30283, 37834], [30284, 37775], [30285, 37950], [30286, 37995], [30287, 40063], [30288, 40066], [30289, 30292, 40069], [30293, 31267], [30294, 40075], [30295, 40078], [30296, 30298, 40080], [30299, 30300, 40084], [30301, 30302, 40090], [30303, 30308, 40094], [30309, 30313, 40101], [30314, 40107], [30315, 30316, 40109], [30317, 30324, 40112], [30325, 30328, 40122], [30329, 30332, 40132], [30333, 30334, 40138], [30497, 30501, 40140], [30502, 30504, 40147], [30505, 30507,
                    40151], [30508, 30509, 40156], [30510, 40159], [30511, 40162], [30512, 38780], [30513, 38789], [30514, 30515, 38801], [30516, 38804], [30517, 38831], [30518, 38827], [30519, 38819], [30520, 38834], [30521, 38836], [30522, 39601], [30523, 39600], [30524, 39607], [30525, 40536], [30526, 39606], [30527, 39610], [30528, 39612], [30529, 39617], [30530, 39616], [30531, 39621], [30532, 39618], [30533, 30534, 39627], [30535, 39633], [30536, 39749], [30537, 39747], [30538, 39751], [30539, 39753], [30540, 39752], [30541, 39757], [30542, 39761], [30543, 39144], [30544, 39181],
                [30545, 39214], [30546, 39253], [30547, 39252], [30548, 39647], [30549, 39649], [30550, 39654], [30551, 39663], [30552, 39659], [30553, 39675], [30554, 39661], [30555, 39673], [30556, 39688], [30557, 39695], [30558, 39699], [30559, 39711], [30560, 39715], [30561, 30562, 40637], [30563, 32315], [30564, 40578], [30565, 30566, 40583], [30567, 40587], [30568, 40594], [30569, 37846], [30570, 40605], [30571, 40607], [30572, 30574, 40667], [30575, 40672], [30576, 40671], [30577, 40674], [30578, 40681], [30579, 40679], [30580, 40677], [30581, 40682], [30582, 40687], [30583,
                    40738], [30584, 40748], [30585, 40751], [30586, 40761], [30587, 40759], [30588, 30589, 40765], [30590, 40772]]
        };
        U || (U = {});
        var $a = U;
        $a.browser = {
            extension: {
                sendRequest: function (a, b) {
                    b || (b = function () {
                    });
                    if (a.topic && ($a.console.debug("request for: " + a.topic), "function" == typeof $a.service[a.topic])) $a.service[a.topic](a, null, b)
                }, baseURI: null, getURL: function (a) {
                    return this.baseURI + a
                }
            }, tabs: {
                create: function (a) {
                    (a = a.url) && window.open(a, null)
                }
            }
        };
        xa.browser.extension.baseURI = "http://ry.tbcdn.cn/extension/v352/";
        U || (U = {});
        var Ca = window.console;
        Ca || (Ca = window.console = {});
        for (var X = "log trace debug info warn error".split(" "), Oa = 0, Jc = X.length; Oa < Jc; Oa++) "undefined" == typeof Ca[X[Oa]] && (Ca[X[Oa]] = function () {
        });
        for (var jb = ["TRACE", "DEBUG", "INFO", "WARN", "ERROR"], ta = {}, Oa = 0; Oa < jb.length; Oa++) ta[jb[Oa]] = Oa;
        var Bb = ta.WARN;
        U.console = {
            setLevel: function (a) {
                a in ta && (Bb = ta[a])
            }, getLevel: function () {
                return jb[Bb]
            }, log: function (a) {
                Ca.log(a)
            }, trace: function (a) {
                kb(a, ta.TRACE)
            }, debug: function (a) {
                kb(a, ta.DEBUG)
            }, info: function (a) {
                kb(a,
                    ta.INFO)
            }, warn: function (a) {
                kb(a, ta.WARN)
            }, error: function (a) {
                kb(a, ta.ERROR)
            }
        };
        var kb = function (a, b) {
            if (b >= Bb) {
                var c = new Date, d = function (a) {
                        return (10 > a ? "0" : "") + a
                    },
                    a = c.getFullYear() + "-" + d(c.getMonth() + 1) + "-" + d(c.getDate()) + " " + d(c.getHours()) + ":" + d(c.getMinutes()) + ":" + d(c.getSeconds()) + " [" + jb[b] + "]" + a;
                switch (b) {
                    case ta.trace:
                        Ca.trace(a);
                        break;
                    case ta.DEBUG:
                        Ca.debug(a);
                        break;
                    case ta.INFO:
                        Ca.info(a);
                        break;
                    case ta.WARN:
                        Ca.warn(a);
                        break;
                    case ta.ERROR:
                        Ca.error(a)
                }
            }
        };
        U || (U = {});
        var Da = U;
        Da.filter_int = function (a,
                                  b, c, d) {
            a = parseInt(a);
            return isNaN(a) || "undefined" != typeof c && a < c || "undefined" != typeof d && a > d ? b : a
        };
        Da.parse_url = function (a, b) {
            for (var c = "source protocol authority userInfo user password host port relative path directory file query anchor".split(" "), d = /^(?:(?![^:@]+:[^:@\/]*@)([^:\/?#.]+):)?(?:\/\/\/?)?((?:(([^:@]*):?([^:@]*))?@)?([^:\/?#]*)(?::(\d*))?)(((\/(?:[^?#](?![^?#\/]*\.[^?#\/.]+(?:[?#]|$)))*\/?)?([^?#\/]*))(?:\?([^#]*))?(?:#(.*))?)/.exec(a), e = {}, g = 14; g--;) e[c[g]] = d[g] || "";
            switch (b) {
                case "PHP_URL_SCHEME":
                    return e.protocol;
                case "PHP_URL_HOST":
                    return e.host;
                case "PHP_URL_PORT":
                    return e.port;
                case "PHP_URL_USER":
                    return e.user;
                case "PHP_URL_PASS":
                    return e.password;
                case "PHP_URL_PATH":
                    return e.path;
                case "PHP_URL_QUERY":
                    return e.query;
                case "PHP_URL_FRAGMENT":
                    return e.anchor;
                default:
                    return c = {}, "" !== e.protocol && (c.scheme = e.protocol), "" !== e.host && (c.host = e.host), "" !== e.port && (c.port = e.port), "" !== e.user && (c.user = e.user), "" !== e.password && (c.pass = e.password), "" !== e.path && (c.path = e.path), "" !== e.query && (c.query = e.query), "" !== e.anchor &&
                    (c.fragment = e.anchor), c
            }
        };
        Da.http_build_query = function (a, b, c) {
            var d, e, g = [], p = function (a, b, c) {
                var d, e = [];
                !0 === b ? b = "1" : !1 === b && (b = "0");
                if (null !== b && "object" === typeof b) {
                    for (d in b) null !== b[d] && e.push(p(a + "[" + d + "]", b[d], c));
                    return e.join(c)
                }
                if ("function" !== typeof b) return encodeURIComponent(a) + "=" + encodeURIComponent(b);
                throw Error("There was an error processing for http_build_query().");
            };
            c || (c = "&");
            for (e in a) d = a[e], b && !isNaN(e) && (e = String(b) + e), g.push(p(e, d, c));
            return g.join(c)
        };
        Da.cookie = function (a,
                              b, c) {
            if (1 < arguments.length && (!/Object/.test(Object.prototype.toString.call(b)) || null === b || void 0 === b)) {
                c = c || {};
                if (null === b || void 0 === b) c.expires = -1;
                if ("number" === typeof c.expires) {
                    var d = c.expires, e = c.expires = new Date;
                    e.setDate(e.getDate() + d)
                }
                b = String(b);
                return document.cookie = [encodeURIComponent(a), "=", c.raw ? b : encodeURIComponent(b), c.expires ? "; expires=" + c.expires.toUTCString() : "", c.path ? "; path=" + c.path : "", c.domain ? "; domain=" + c.domain : "", c.secure ? "; secure" : ""].join("")
            }
            for (var c = b || {}, d = c.raw ?
                function (a) {
                    return a
                } : decodeURIComponent, e = document.cookie.split("; "), g = 0, p; p = e[g] && e[g].split("="); g++) if (d(p[0]) === a) return d(p[1] || "");
            return null
        };
        Da.ajax = function (a) {
            "function" == typeof Da.loadJQuery && (g = Da.loadJQuery());
            a.dataType && "jsonp" != a.dataType ? Da.console.debug("S.ajax() does not support non-jsonp request.") : (a.jsonp = a.jsonp || "callback", a.dataType = "jsonp", g.ajax(a))
        };
        xa.constants = {
            search_engines: {
                suning: {
                    locales: "zh",
                    name: "suning",
                    host: "suning\\.com",
                    homepage: "http://www.suning.com",
                    order: 1007,
                    url: "http://ruyi.taobao.com/ext/search?q={K}&seller=suning&page={P}&pid={F}",
                    title: {en: "Suning", zh: "\u82cf\u5b81\u6613\u8d2d"},
                    selected: !0,
                    encoding: "def",
                    enabled: !0
                },
                product_search: {
                    order: 1007,
                    url: "http://ruyi.taobao.com/ext/productSearch?q={K}&pid={F}&u={U}&c={C}",
                    locales: "zh",
                    name: "product_search",
                    selected: !0,
                    enabled: !1,
                    encoding: "def"
                },
                etao: {
                    locales: "zh",
                    name: "etao",
                    host: "",
                    homepage: "http://www.etao.com",
                    order: 1021,
                    url: "http://ruyi.taobao.com/ext/etaoSearch?q={K}&application={A}&pid={F}&page={P}&version=3.5.0.0",
                    title: {en: "Etao", zh: "\u6240\u6709\u5546\u57ce"},
                    selected: !0,
                    encoding: "def",
                    enabled: !0
                },
                amazoncn: {
                    locales: "zh",
                    name: "amazoncn",
                    host: "amazon\\.cn",
                    homepage: "http://www.amazon.cn",
                    order: 1002,
                    url: "http://ruyi.taobao.com/ext/search?q={K}&seller=amazon&page={P}&pid={F}",
                    title: {en: "Amazon Cn", zh: "\u4e9a\u9a6c\u900a"},
                    selected: !0,
                    encoding: "def",
                    enabled: !0
                },
                yihaodian: {
                    locales: "zh",
                    name: "yihaodian",
                    host: "yihaodian\\.com",
                    homepage: "http://www.yihaodian.com",
                    order: 1009,
                    url: "http://ruyi.taobao.com/ext/search?q={K}&seller=yihaodian&page={P}&pid={F}",
                    title: {en: "Yihaodian", zh: "1\u53f7\u5e97"},
                    selected: !1,
                    encoding: "def",
                    enabled: !0
                },
                dangdang: {
                    locales: "zh",
                    name: "dangdang",
                    host: "dangdang\\.com",
                    homepage: "http://www.dangdang.com",
                    order: 1005,
                    url: "http://ruyi.taobao.com/ext/search?q={K}&seller=dangdang&page={P}&pid={F}",
                    title: {en: "DangDang", zh: "\u5f53\u5f53\u7f51"},
                    selected: !0,
                    encoding: "def",
                    enabled: !0
                },
                amazoncn_book: {
                    locales: "zh",
                    url: "http://ruyi.taobao.com/ext/search?q={K}&seller=amazon&page={P}&pid={F}",
                    name: "amazoncn_book",
                    selected: !0,
                    encoding: "def",
                    enabled: !1
                },
                jingdong: {
                    locales: "zh",
                    name: "jingdong",
                    host: "360buy\\.com",
                    homepage: "http://www.360buy.com",
                    order: 1004,
                    url: "http://ruyi.taobao.com/ext/search?q={K}&seller=360buy&page={P}&pid={F}",
                    title: {en: "JingDong", zh: "\u4eac\u4e1c\u5546\u57ce"},
                    selected: !0,
                    encoding: "def",
                    enabled: !0
                },
                taobao: {
                    locales: "zh",
                    name: "taobao",
                    host: "tmall\\.com",
                    homepage: "http://www.tmall.com",
                    order: 1001,
                    url: "http://ruyi.taobao.com/ext/taobaoSearch?keyword={K}&application={A}&pid={F}",
                    title: {en: "Tmall", zh: "\u5929\u732b"},
                    selected: !0,
                    encoding: "def",
                    enabled: !0
                },
                coo8: {
                    locales: "zh",
                    name: "coo8",
                    host: "coo8\\.com",
                    homepage: "http://www.coo8.com",
                    order: 1009,
                    url: "http://ruyi.taobao.com/ext/search?q={K}&seller=coo8&page={P}&pid={F}",
                    title: {en: "Coo8", zh: "\u5e93\u5df4\u5546\u57ce"},
                    selected: !1,
                    encoding: "def",
                    enabled: !0
                },
                icson: {
                    locales: "zh",
                    name: "icson",
                    host: "51buy\\.com",
                    homepage: "http://www.51buy.com",
                    order: 1017,
                    url: "http://ruyi.taobao.com/ext/search?q={K}&seller=51buy&page={P}&pid={F}",
                    title: {en: "YiXun", zh: "\u6613\u8fc5\u7f51"},
                    selected: !1,
                    encoding: "def",
                    enabled: !0
                }
            }, site_config: {
                detail_info: {
                    "360buy.com": [{
                        patterns: [{price: "#summary-price .p-price img"}],
                        url: "http://www\\.360buy\\.com/product/\\d+\\.html"
                    }]
                }, search: {
                    zh: {
                        "new7.com": {www: [{k: "", d: "", s: "keywords"}]},
                        "winxuan.com": {search: [{k: "keyword", d: "&", s: ""}]},
                        "google.cn": {www: [{k: "q", d: "&", s: ""}]},
                        "beifabook.com": {book: [{k: "SearchCodeValue", d: "&", s: ""}]},
                        "china-pub.com": {search: [{k: "key1", d: "&", s: ""}]},
                        "ymatou.com": {www: [{k: "k", d: "&", s: ""}]},
                        "m18.com": {
                            search: [{
                                k: "keyword", d: "&",
                                s: ""
                            }]
                        },
                        "womai.com": {
                            www: [{k: "topKeywords", d: "&", s: ""}],
                            sh: [{k: "topKeywords", d: "&", s: ""}]
                        },
                        "no5.com.cn": {www: [{k: "keyword", d: "&", s: ""}]},
                        "rakuten.cn": {search: [{k: "k", d: "&", s: ""}]},
                        "17mh.com": {www: [{k: "keyword", d: "&", s: ""}]},
                        "xijie.com": {www: [{k: "keyword", d: "&", s: ""}]},
                        "139shop.com": {mobile: [{k: "", d: "&", s: "kw0"}]},
                        "lefeng.com": {search: [{k: "key", d: "&", s: ""}]},
                        "homevv.com": {www: [{k: "keyword", d: "&", s: ""}]},
                        "xiaoye.com": {www: [{k: "wd", d: "&", s: ""}]},
                        "yihaodian.com": {search: [{k: "", d: "", s: "keyword"}]},
                        "sina.com.cn": {
                            mall: [{
                                k: "w",
                                d: "&", s: "search-word"
                            }]
                        },
                        "suning.com": {
                            search: [{k: "keyword", d: "&", s: ""}],
                            www: [{k: "searchKeywords", d: "&", s: ""}]
                        },
                        "naruko.com.cn": {www: [{k: "key", d: "&", s: ""}]},
                        "2688.com": {search: [{k: "q", d: "&", s: ""}]},
                        "chinadrtv.com": {search: [{k: "keyword", d: "&", s: ""}]},
                        "cliport.com": {www: [{k: "keywords", d: "&", s: ""}]},
                        "gome.com.cn": {search: [{k: "keyword", d: "&", s: ""}], www: [{k: "question", d: "&", s: ""}]},
                        "jd.com": {search: [{k: "", d: "", s: "key"}]},
                        "moonbasa.com": {s: [{k: "Keyword", d: "&", s: ""}, {k: "keyword", d: "&", s: ""}]},
                        "1mall.com": {
                            search: [{
                                k: "",
                                d: "", s: "keyword"
                            }]
                        },
                        "okbuy.com": {www: [{k: "top_key", d: "&", s: ""}]},
                        "51sheyuan.com": {www: [{k: "key", d: "&", s: ""}]},
                        "d1.com.cn": {www: [{k: "headsearchkey", d: "&", s: ""}]},
                        "caomeipai.com": {
                            buy: [{
                                k: "",
                                sk: "\u8bf7\u8f93\u5165\u8981\u641c\u7d22\u7684\u5185\u5bb9",
                                d: "",
                                s: "search_txt"
                            }]
                        },
                        "likeface.com": {www: [{k: "key", d: "&", s: ""}]},
                        "wl.cn": {search: [{k: "q", d: "&", s: ""}]},
                        "aimer.com.cn": {www: [{k: "keywords", d: "&", s: ""}]},
                        "houmart.com": {www: [{k: "keyword", d: "&", s: ""}]},
                        "taobao.com": {
                            s8: [{k: "q", d: "&", s: ""}],
                            search: [{
                                k: "q",
                                d: "&", s: ""
                            }],
                            s: [{k: "q", d: "&", s: ""}],
                            "try": [{k: "q", d: "&", s: "q"}],
                            "mini.s": [{k: "q", d: "&", s: ""}],
                            "list.3c": [{k: "q", d: "&", s: ""}],
                            search1: [{k: "q", d: "&", s: ""}],
                            search8: [{k: "q", d: "&", s: ""}],
                            list: [{k: "q", d: "&", s: ""}]
                        },
                        "sephora.cn": {www: [{K: "", d: "&", s: "sh_keyword"}]},
                        "tmall.com": {
                            "3c": [{k: "q", d: "&", s: ""}],
                            "list.xie": [{k: "q", d: "&", s: ""}],
                            "list.3c": [{k: "q", d: "&", s: ""}],
                            list: [{k: "q", d: "&", s: ""}]
                        },
                        "chinapay.com": {"search.emall": [{k: "keyword", d: "&", s: ""}]},
                        "redbaby.com.cn": {www: [{k: "keyword", d: "&", s: ""}]},
                        "newegg.com.cn": {
                            www: [{
                                k: "keyword",
                                d: "&", s: ""
                            }]
                        },
                        "bookschina.com": {www: [{k: "", sk: "\u5173\u952e\u5b57", d: "", s: "stp"}]},
                        "51buy.com": {s: [{k: "q", d: "&", s: ""}]},
                        "douban.com": {
                            movie: [{k: "search_text", d: "&", s: ""}],
                            music: [{k: "search_text", d: "&", s: ""}],
                            book: [{k: "search_text", d: "&", s: ""}]
                        },
                        "coo8.com": {www: [{k: "question", d: "&", s: ""}]},
                        "eachnet.com": {search: [{k: "", d: "", s: "headerkeywords"}]},
                        "xiu.com": {search: [{k: "kw", d: "&", s: ""}]},
                        "binggo.com": {www: [{k: "keyword", d: "&", s: ""}]},
                        "tiantian.com": {
                            www: [{k: "keyword", d: "&", s: ""}], s: [{
                                k: "keyword", d: "&",
                                s: ""
                            }]
                        },
                        "51youpin.com": {www: [{k: "keywords", d: "&", s: ""}]},
                        "k121.com": {www: [{k: "", d: "", s: "kws"}]},
                        "360buy.com": {search: [{k: "", d: "", s: "key"}]},
                        "vancl.com": {s: [{k: "k", d: "&", s: ""}]},
                        "yintai.com": {www: [{k: "keyword", d: "&", s: ""}]},
                        "99read.com": {search: [{k: "q", d: "&", s: ""}]},
                        "menglu.com": {
                            www: [{k: "keyWord", d: "&", s: ""}, {k: "", d: "", s: "key_word"}],
                            DUMMY: [{k: "keyWord", d: "&", s: ""}, {k: "", d: "", s: "key_word"}]
                        },
                        "amazon.cn": {
                            www: [{k: "field-keywords", d: "&", s: ""}, {
                                k: "keywords",
                                d: "&",
                                s: ""
                            }, {k: "k", d: "&", s: ""}]
                        },
                        "masamaso.com": {
                            www: [{
                                k: "keywords",
                                d: "&", s: ""
                            }]
                        },
                        "tom.com": {"search.ule": [{k: "", d: "", s: "search-keywords"}]},
                        "yaodian100.com": {www: [{k: "searchKeyword", d: "&", s: ""}]},
                        "dangdang.com": {
                            newsearch: [{k: "key", d: "&", s: ""}, {k: "q", d: "&", s: ""}],
                            search: [{k: "key", d: "&", s: ""}, {k: "q", d: "&", s: ""}],
                            searchb: [{k: "key", d: "&", s: ""}, {k: "q", d: "&", s: ""}]
                        },
                        "efeihu.com": {www: [{k: "searchword", d: "&", s: ""}]},
                        "leyou.com.cn": {www: [{k: "keyWord", d: "&", s: ""}]},
                        "vjia.com": {www: [{k: "k", d: "&", s: ""}], s: [{k: "k", d: "&", s: ""}]},
                        "google.com.hk": {www: [{k: "q", d: "&", s: ""}]},
                        "paipai.com": {
                            sse1: [{
                                k: "",
                                d: "", s: "KeyWord"
                            }],
                            man: [{k: "", d: "", s: "KeyWord"}],
                            food: [{k: "", d: "", s: "KeyWord"}],
                            "3c": [{k: "", d: "", s: "headKeyWord"}],
                            sseld: [{k: "", d: "", s: "subKeyWordInput"}],
                            beauty: [{k: "", d: "", s: "headKeyWord"}],
                            life: [{k: "", d: "", s: "KeyWord"}]
                        },
                        "jumei.com": {search: [{k: "search", d: "&", s: ""}]},
                        "qq.com": {
                            shop: [{k: "q_show", d: "&", s: ""}, {k: "q", d: "&", s: ""}],
                            "searchex.buy": [{k: "KeyWord", d: "&", s: ""}]
                        },
                        "lusen.com": {www: [{k: "sm", d: "&", s: ""}]},
                        "nala.com.cn": {www: [{k: "content", d: "&", s: ""}]}
                    }
                }, movie: {
                    "so.tv.sohu.com": [{
                        patterns: [{
                            a: ".vInfo .vPic a",
                            img: ".vInfo .vPic a>img", list: "#videoData"
                        }], url: "so\\.tv\\.sohu\\.com/list_p11(00)?_[a-zA-Z0-9-_]+.html"
                    }, {
                        patterns: [{
                            a: ".search-result .show-pic a",
                            img: ".search-result .show-pic a>img"
                        }, {a: "a.pic", img: "a.pic>img", list: ".column(.pictxtList|.picList) .column-bd ul"}],
                        url: "so\\.tv\\.sohu\\.com/mts\\?"
                    }],
                    "list.iqiyi.com": [{
                        patterns: [{a: "li a.imgBg1", img: "li a.imgBg1>img", list: ".ulList"}],
                        url: "list\\.iqiyi\\.com/www/1/[-a-zA-Z0-9]+.html"
                    }],
                    "soku.com": [{
                        patterns: [{
                            a: ".item .p_link a", img: ".item .p_thumb img",
                            hover: "a"
                        }], url: "www\\.soku\\.com/channel/movie(list)?_"
                    }, {
                        patterns: [{a: ".p_link a", img: ".p_thumb img", hover: "a", list: ".DIR"}, {
                            a: ".v_link a",
                            img: ".v_link a",
                            hover: "a",
                            list: ".result"
                        }], url: "soku\\.com/(search_video/q_.+|v?)"
                    }, {
                        patterns: [{a: ".p_link a", img: ".p_thumb img", list: ".DIR"}, {
                            a: ".pic a",
                            img: ".pic a",
                            list: "#search_result #srList"
                        }], url: "soku\\.com/t/nisearch/.+"
                    }],
                    "www.iqiyi.com": [{
                        patterns: [{a: "li a.pic", img: "li a.pic>img", list: ".movielist"}],
                        url: "www\\.iqiyi\\.com/([?#]|$)"
                    }, {
                        patterns: [{
                            a: "li a.imgBg1",
                            img: "li a.imgBg1>img", list: ".ulList"
                        }], url: "www\\.iqiyi\\.com/dianying/([?#]|$)"
                    }],
                    "movie.douban.com": [{
                        patterns: [{
                            a: ".review-hd a",
                            img: ".review-hd a>img",
                            list: ".article"
                        }, {a: ".douban-top250-bd dt>a", img: ".douban-top250-bd dt>a>img", list: ".aside"}],
                        url: "movie\\.douban\\.com/([?#]|$)"
                    }, {
                        patterns: [{a: ".item a.nbg", img: ".item a.nbg>img", list: ".article"}],
                        url: "movie\\.douban\\.com/.+$"
                    }],
                    "so.iqiyi.com": [{
                        patterns: [{a: "li a.imgBg1", img: "li a.imgBg1>img", list: ".ulList"}],
                        url: "so\\.iqiyi\\.com/([?#]|$)"
                    },
                        {
                            patterns: [{
                                a: ".star_Img",
                                img: ".star_Img>img",
                                list: "#searchResCtn"
                            }, {a: "li a.sea_Img_box", img: "li a.sea_Img_box>img", list: ".List"}],
                            url: "so\\.iqiyi\\.com/so/q_.+"
                        }],
                    "tv.sohu.com": [{
                        patterns: [{a: "li>a", img: "li>a>img", list: ".pp.pp3"}],
                        url: "tv\\.sohu\\.com/movie"
                    }],
                    "v.qq.com": [{
                        patterns: [{a: "a.mod_poster_130", img: "a.mod_poster_130>img", list: ".mod_cont"}],
                        url: "v\\.qq\\.com/(movie|list/1_[0-9-_]+\\.html|search\\.html)"
                    }]
                }, book: {
                    "item.taobao.com": {
                        patterns: [{
                            url: ".", meta: {
                                price: [{regexp: "([\\d.]+)", xpath: "#J_StrPriceModBox"}],
                                isbn: [{regexp: "ISBN[^><]*?:&nbsp;(\\w+)", xpath: "#attributes .attributes-list"}],
                                author: [{
                                    regexp: "\u4f5c\u8005:&nbsp;([^<]+?)(?:\\s*\u8457)?<",
                                    xpath: "#attributes .attributes-list"
                                }]
                            }
                        }], index: 5
                    },
                    "book.douban.com": {
                        patterns: [{
                            url: ".",
                            meta: {
                                price: [{regexp: "\u5b9a\u4ef7:</span>\\s*([\\d\\.]+)", xpath: "#info"}],
                                isbn: [{regexp: "ISBN:</span>\\s+(\\w+)", xpath: "#info"}],
                                author: [{
                                    regexp: "\u4f5c\u8005</span>[^<]+<a [^>]+>(?:\\[[^\\]]+\\]\\s*)?([^<]+)<",
                                    xpath: "#info"
                                }]
                            }
                        }], index: 3
                    },
                    "www.wl.cn": {
                        patterns: [{
                            url: ".",
                            meta: {
                                price: [{regexp: "(.*)", xpath: ".pror>p:eq(1) .wl"}],
                                isbn: [{regexp: "ISBN[^\\d]*(\\d+)", xpath: ".pror>p:first-child"}],
                                author: [{regexp: "^([^\\(]+)", xpath: ".pror>p:first-child .blue:first-child"}]
                            }
                        }]
                    },
                    "www.amazon.cn": {
                        patterns: [{
                            meta: {
                                price: [{regexp: "([\\d\\.]+)", xpath: ".priceLarge"}],
                                isbn: [{regexp: "ISBN:</b>\\s+(\\w+)", xpath: "table .content li"}],
                                author: [{
                                    regexp: "<a[^>]+>([^<]+)</a> \\(\u4f5c\u8005\\)",
                                    xpath: "#handleBuy .buying"
                                }]
                            }
                        }], index: 4
                    },
                    "www.winxuan.com": {
                        patterns: [{
                            url: "product/", meta: {
                                price: [{
                                    regexp: "(.*)",
                                    xpath: ".goods_info .price_info .fb"
                                }],
                                author: [{regexp: "(.*)", xpath: ".goods_info .ohter_info .link1:eq(0)"}],
                                isbn: [{regexp: "\u6761\u5f62\u7801 :(\\d+)", xpath: ".book_more tr"}]
                            }
                        }]
                    },
                    "book.360buy.com": {
                        patterns: [{
                            url: ".",
                            meta: {
                                price: [{regexp: "([\\d\\.]+)", xpath: "#priceinfo"}],
                                isbn: [{regexp: "\uff29\uff33\uff22\uff2e\uff1a</span>(\\w+)", xpath: "#summary li"}],
                                author: [{
                                    regexp: "\u4f5c\u3000\u3000\u8005\uff1a[\\s\\S]+?<a [^>]+>(?:\\[[^\\]]+\\]\\s*)?([^<]+)<",
                                    xpath: "#summary li"
                                }]
                            }
                        }], index: 2
                    },
                    "www.99read.com": {
                        patterns: [{
                            meta: {
                                author: [{
                                    regexp: "\u3010\u4f5c\u8005\u3011\uff1a.+>(.+?)</a>",
                                    xpath: "#panel-right>.W720>.pro-ptxt>ul>li"
                                }],
                                isbn: [{
                                    regexp: "(?:\u3010\u4ea7\u54c1\u6761\u7801\u3011\uff1a)([A-z\\d]+)",
                                    xpath: "#panel-right>.NeiRongA-box>.NeiRongA-text>ul>li"
                                }]
                            }
                        }]
                    },
                    "www.suning.com": {
                        patterns: [{
                            url: "10052",
                            meta: {
                                isbn: [{regexp: "ISBN[^\\d]*(\\d+)", xpath: ".bookinfo>li:eq(0)>span"}],
                                author: [{
                                    regexp: "(?:[\uff08\\(\\[\u3010].[\\]\\)\\\uff09\\\u3011])?([^,^\u3001^\uff0c]+)",
                                    xpath: "#authorPageFormInPD a"
                                }]
                            }
                        }]
                    },
                    "detail.tmall.com": {
                        patterns: [{
                            url: ".", meta: {
                                price: [{regexp: "([\\d.]+)", xpath: "#J_StrPriceModBox"}],
                                isbn: [{regexp: "ISBN[^><]*?:&nbsp;(\\w+)", xpath: "#attributes .attributes-list"}],
                                author: [{
                                    regexp: "\u4f5c\u8005:&nbsp;([^<]+?)(?:\\s*\u8457)?<",
                                    xpath: "#attributes .attributes-list"
                                }]
                            }
                        }], index: 5
                    },
                    "product.china-pub.com": {
                        patterns: [{
                            url: ".",
                            meta: {
                                price: [{regexp: "([\\d\\.]+)", xpath: ".price-area span:eq(0)"}],
                                isbn: [{regexp: "ISBN[^\\d]*(\\d+)", xpath: ".more-infos li"}],
                                author: [{
                                    regexp: "\u4f5c\u8005[\\s\\S]+?<strong>(?:\\(.+?\\))?([^\\(<]+)",
                                    xpath: ".more-infos li"
                                }]
                            }
                        }]
                    },
                    "e.jd.com": {
                        patterns: [{
                            url: ".", meta: {
                                price: [{
                                    regexp: "([\\d\\.]+)",
                                    xpath: "#priceinfo"
                                }],
                                isbn: [{regexp: "\uff29\uff33\uff22\uff2e\uff1a(\\w+)", xpath: "#summary li"}],
                                author: [{
                                    regexp: "\u4f5c(?:&nbsp;)+\u8005\uff1a[\\s\\S]+?<a [^>]+>(?:\\[[^\\]]+\\]\\s*)?([^<]+)<",
                                    xpath: "#summary li"
                                }]
                            }
                        }]
                    },
                    "shuziitem.taobao.com": {
                        patterns: [{
                            meta: {
                                price: [{regexp: "([\\d\\.]+)", xpath: "#J_StrPrice"}],
                                isbn: [{regexp: "ISBN.*?<b>(\\w+)", xpath: "#detail .vaddress"}],
                                author: [{
                                    regexp: "\u4f5c\u3000\u3000\u8005\uff1a</span>(\\S+)",
                                    xpath: "#detail .tb-item-rates"
                                }]
                            }
                        }]
                    },
                    "product.dangdang.com": {
                        patterns: [{
                            url: "[pP]roduct.aspx(?:\\?|.+&)product_id=(?:\\d+)",
                            meta: {
                                price: [{regexp: "</span>([\\d\\.]+)", xpath: ".show_info .d_price"}],
                                isbn: [{regexp: "I S B N.*?>(\\w+)", xpath: ".intro .c3"}],
                                author: [{regexp: "\u4f5c \u8005\uff1a.*?<a [^>]+>([^<]+)<", xpath: ".intro .c1"}]
                            }
                        }], index: 1
                    },
                    "detail.bookuu.com": {
                        patterns: [{
                            url: ".",
                            meta: {
                                price: [{regexp: "(.*)", xpath: "#money_xsj"}],
                                isbn: [{regexp: "ISBN[^\\d]*(\\d+)", xpath: ".info-li li"}],
                                author: [{
                                    regexp: "(?:\\([^\\)]+\\))?([^\\|\\/]+)",
                                    xpath: ".info-li li.one-line:eq(2) ~ li a"
                                }]
                            }
                        }]
                    },
                    "item.tmall.com": {
                        patterns: [{
                            url: ".", meta: {
                                price: [{
                                    regexp: "([\\d.]+)",
                                    xpath: "#J_StrPriceModBox"
                                }],
                                isbn: [{regexp: "ISBN[^><]*?:&nbsp;(\\w+)", xpath: "#attributes .attributes-list"}],
                                author: [{
                                    regexp: "\u4f5c\u8005:&nbsp;([^<]+?)(?:\\s*\u8457)?<",
                                    xpath: "#attributes .attributes-list"
                                }]
                            }
                        }], index: 5
                    },
                    "e.360buy.com": {
                        patterns: [{
                            url: ".",
                            meta: {
                                price: [{regexp: "([\\d\\.]+)", xpath: "#priceinfo"}],
                                isbn: [{regexp: "\uff29\uff33\uff22\uff2e\uff1a(\\w+)", xpath: "#summary li"}],
                                author: [{
                                    regexp: "\u4f5c(?:&nbsp;)+\u8005\uff1a[\\s\\S]+?<a [^>]+>(?:\\[[^\\]]+\\]\\s*)?([^<]+)<",
                                    xpath: "#summary li"
                                }]
                            }
                        }]
                    },
                    "book.jd.com": {
                        patterns: [{
                            url: ".",
                            meta: {
                                price: [{regexp: "([\\d\\.]+)", xpath: "#priceinfo"}],
                                isbn: [{regexp: "\uff29\uff33\uff22\uff2e\uff1a</span>(\\w+)", xpath: "#summary li"}],
                                author: [{
                                    regexp: "\u4f5c\u3000\u3000\u8005\uff1a[\\s\\S]+?<a [^>]+>(?:\\[[^\\]]+\\]\\s*)?([^<]+)<",
                                    xpath: "#summary li"
                                }]
                            }
                        }], index: 2
                    },
                    "www.exvv.com": {
                        patterns: [{
                            url: "proID=",
                            meta: {
                                price: [{regexp: "(.*)", xpath: ".title4 .price"}],
                                isbn: [{regexp: "ISBN[^\\d]*(\\d+)", xpath: ".title4 div:eq(1)"}],
                                author: [{regexp: "^(\\S+)", xpath: ".title4 a:eq(0) u"}]
                            }
                        }]
                    }
                },
                srp: {
                    "book.beifabook.com": [{
                        patterns: [{a: "a", img: "a>img", list: "td[rowspan=4]"}, {
                            a: "a",
                            img: "a>img",
                            list: ".p-img"
                        }]
                    }],
                    "new7.com": [{
                        patterns: [{
                            a: "li>.pp>a,li.Nshow>.pic>a,li.in>.pic>a",
                            img: "li>.pp>a>img,li.Nshow>.pic>a>img,li.in>.pic>a>img",
                            list: ".bd,.Products,.hideC"
                        }], url: "www\\.new7\\.com/([?#]|$)"
                    }, {
                        patterns: [{
                            a: "li.accMe>p>a.accMf,.rmdI>a",
                            img: "li.accMe>p>a.accMf>img,.rmdI>a>img",
                            list: ".gd"
                        }, {a: "li.in>.pic>a", img: "li.in>.pic>a>img", list: ".placeanorder"}],
                        url: "www\\.new7\\.com/\\w+$"
                    }, {
                        patterns: [{
                            a: "li>.productPic>a,.accMf,.skimA",
                            img: "li>.productPic>a>img,.accMf>img,.skimA>img", list: ".likeProduct,.accMe,#history_list"
                        }, {a: "ul>li>a", img: "ul>li>a>img", list: "#bfd_psl"}],
                        url: "www\\.new7\\.com/(products/\\S+\\.html|search\\.php\\?)"
                    }],
                    "beifabook.com": [{
                        patterns: [{a: "a", img: "a>img", list: "div[class$=-img]"}, {
                            a: "li>a",
                            img: "li>a>img",
                            list: ".tabcon"
                        }], ulr: "(www\\.)?beifabook\\.com/([?#]|$)"
                    }],
                    "huimai100.com": [{
                        patterns: [{
                            a: "div[id^=con_one_]>ul>li>a,.main>ul>li>a",
                            img: "div[id^=con_one_]>ul>li>a>img,.main>ul>li>a>img",
                            list: ".Contentbox_1,.recommend"
                        },
                            {
                                a: ".left-one>.main1>ul>li>.pic-main>a",
                                img: ".left-one>.main1>ul>li>.pic-main>a>img",
                                list: "#content2"
                            }], url: "www\\.huimai100\\.com/([?#]|$)"
                    }, {
                        patterns: [{
                            a: "ul>div[id^=con_one_]>li>.pic>a",
                            img: "ul>div[id^=con_one_]>li>.pic>a>img",
                            list: ".Contentbox"
                        }, {a: ".box>.item>.pic>a", img: ".box>.item>.pic>a>img", list: ".box2"}],
                        url: "(www|search)\\.huimai100\\.com/(productsh/|searchgoods\\.do)"
                    }],
                    "3c.buy.qq.com": [{patterns: [{a: "a", img: "a>img", list: "div.pic_wrap"}]}],
                    "jmall.360buy.com": [{
                        patterns: [{
                            a: "ul>li>.jItem>.jPic>a,ul>li>.p-img>a",
                            img: "ul>li>.jItem>.jPic>a>img,ul>li>.p-img>a>img", list: ".mc"
                        }]
                    }],
                    "dianqi.tmall.com": [{
                        patterns: [{
                            a: ".itemList-hd>.item>.itemPic>a",
                            img: ".itemList-hd>.item>.itemPic>a>img",
                            list: ".itemList"
                        }, {
                            a: "li>.j_MaskItem",
                            img: "li>.j_MaskItem>.listPic>img",
                            list: "ul[class^=rankingList]"
                        }, {
                            a: ".acc-bd>.acc-items>li>a",
                            img: ".acc-bd>.acc-items>li>a>.itemPic>img",
                            list: ".gdMod-accordion"
                        }]
                    }],
                    "china-pub.com": [{
                        patterns: [{a: "a", img: "a>img", list: ".book_s"}, {
                            a: "a",
                            img: "a>img",
                            list: ".toplistimg"
                        }, {
                            a: ".tuijian_wai>a:has(img)",
                            img: ".tuijian_wai>a:has(img)>img", list: ".lie3"
                        }, {a: "a", img: "a>img", list: ".center_dan_img"}], url: "www\\.china-pub\\.com/(\\w+|[?#]|$)"
                    }, {
                        patterns: [{
                            a: "ul>li.book_shupi>a",
                            img: "ul>li.book_shupi>a>img",
                            list: ".bookshow"
                        }, {
                            a: "ul>li[id^=zt_img]>a:has(img)",
                            img: "ul>li[id^=zt_img]>a:has(img)>img",
                            list: "div[id^=zt_tuwen]"
                        }, {a: ".bmod>a", img: ".bmod>a>img", list: ".zrow"}], url: "www\\.china-pub\\.com/STATIC"
                    }],
                    "cx.dangdang.com": [{
                        patterns: [{a: "a:has(img)", img: "a:has(img)>img", list: "td"}, {
                            a: "ul>li>span.temp06_pic>a",
                            img: "ul>li>span.temp06_pic>a>img", list: ".temp06_list"
                        }, {a: "ul>li>.pic>a", img: "ul>li>.pic>a>img", list: ".product_list"}, {
                            a: "a",
                            img: "a>img",
                            list: ".overall"
                        }]
                    }],
                    "search.99read.com": [{
                        patterns: [{
                            a: ".list_r_list_img>a",
                            img: ".list_r_list_img>a>img",
                            list: ".list_r_list"
                        }], url: "search\\.99read\\.com/(Search/Search\\w+\\.aspx|List)"
                    }],
                    "ymatou.com": [{
                        patterns: [{
                            a: ".bd>ul.hot-prt-list>li>.thumb>a,.bd>ul.prt-list>li>.thumb>a,,.bd>.prt-wrap>.prt-list>li>.thumb>a",
                            img: ".bd>ul.hot-prt-list>li>.thumb>a>img,.bd>ul.prt-list>li>.thumb>a>img,.bd>.prt-wrap>.prt-list>li>.thumb>a>img",
                            list: ".wraper"
                        }], url: "www\\.ymatou\\.com/([?#]|$)"
                    }, {
                        patterns: [{a: "li.item .imgbox>a.img", img: "li.item .imgbox>a.img>img", list: ".pdlist"}],
                        url: "www\\.ymatou\\.com/(brand_b|promptgoods)"
                    }],
                    "static.tao3c.com": [{
                        patterns: [{a: "a", img: "a>img", list: ".sam_box"}],
                        url: "static\\.tao3c\\.com/staticpage/"
                    }],
                    "shopping.lefeng.com": [{
                        patterns: [{a: "a", img: "a>img", list: ".p-info"}, {
                            a: "dl>dt>a",
                            img: "dl>dt>a>img",
                            list: ".product-list"
                        }]
                    }],
                    "no5.com.cn": [{
                        patterns: [{
                            a: ".tab_show>.hot_box>.hot_pic>a,.tab_show>.product_box>.pro_div>.pro_pic>a,dl>dt.sl02>a",
                            img: ".tab_show>.hot_box>.hot_pic>a>img,.tab_show>.product_box>.pro_div>.pro_pic>a>img,dl>dt.sl02>a>img",
                            list: ".tab_mid,.star"
                        }, {
                            a: ".reco_pic>a,.reports_product>.porduct_pic>a",
                            img: ".reco_pic>a>img,.reports_product>.porduct_pic>a>img",
                            list: ".reco_content,.reports_mid"
                        }], url: "www\\.no5\\.com\\.cn/([?#]|$)"
                    }, {
                        patterns: [{
                            a: ".br_ri_intrbox12>ul>li>.br_ri_imgn12>a,.br_ri_intrbox>.br_ri_clip>.br_ri_pic>a",
                            img: ".br_ri_intrbox12>ul>li>.br_ri_imgn12>a>img,.br_ri_intrbox>.br_ri_clip>.br_ri_pic>a>img",
                            list: ".right"
                        }],
                        url: "www\\.no5\\.com\\.cn/(browse/|goodssearch\\.asp)"
                    }, {
                        patterns: [{
                            a: ".ch_box>ul>li>.ch_riimg>a,.star>dl>dt.sl02>a",
                            img: ".ch_box>ul>li>.ch_riimg>a>img,.star>dl>dt.sl02>a>img",
                            list: ".right,.rank_show"
                        }], url: "www\\.no5\\.com\\.cn/[a-z]+\\.html"
                    }],
                    "17mh.com": [{
                        patterns: [{
                            a: ".product-list-item>.product-list-item-pic>a,.recentlyViewed>.recentlyViewed-content>.recentlyViewed-content-item>.recentlyViewed-content-item-pic>a,.goodsSalesRank>.goodsSalesRank-content>.goodsSalesRank-content-item>.goodsSalesRank-content-item-pic>a",
                            img: ".product-list-item>.product-list-item-pic>a>img,.recentlyViewed>.recentlyViewed-content>.recentlyViewed-content-item>.recentlyViewed-content-item-pic>a>img,.goodsSalesRank>.goodsSalesRank-content>.goodsSalesRank-content-item>.goodsSalesRank-content-item-pic>a>img",
                            list: ".product-list,.wrapCon-sider"
                        }], url: "www\\.17mh\\.com/shop/(beauty-cate|index-search\\.html)"
                    }],
                    "searchb.dangdang.com": [{
                        patterns: [{
                            a: ".pic>a",
                            img: ".pic>a>img",
                            list: ".resultlist,.piclist,.category_siderbar,.list_siderbar,.publish_siderbar"
                        }]
                    }],
                    "category.dangdang.com": [{
                        patterns: [{
                            a: "ul>li>.inner>a",
                            img: "ul>li>.inner>a>img",
                            list: ".shoplist"
                        }, {a: "ul>li>a", img: "ul>li>a>img", list: ".history_box"}, {
                            a: "ul>li>.item>.pic>a",
                            img: "ul>li>.item>.pic>a>img",
                            list: ".module_main"
                        }, {a: "a", img: "a>img", list: ".pic"}], url: "\\.com/all"
                    }],
                    "catalog.vancl.com": [{
                        patterns: [{a: "ul>li>a", img: "ul>li>a>img", list: ".productList"}, {
                            a: "ul>li>div>a",
                            img: "ul>li>div>a>img",
                            list: ".zzkList"
                        }, {a: "ul>li>div>a", img: "ul>li>div>a>img", list: ".zhong"}, {
                            a: "a:has(img)", img: "a:has(img)>img",
                            list: ".pic_pub"
                        }]
                    }],
                    "yougou.com": [{
                        patterns: [{
                            a: "ul>li>a",
                            img: "ul>li>a>img",
                            list: "div[id$=-list]"
                        }, {a: "ul>li>a", img: "ul>li>a>img", list: ".spec_bom"}, {
                            a: "a",
                            img: "a>img",
                            list: "div[class^=adinfo]"
                        }], url: "www\\.yougou\\.com/([?#]|$)"
                    }, {
                        patterns: [{a: "li>span>a:has(img)", img: "li>span>a:has(img)>img", list: ".proList"}],
                        url: "www\\.yougou\\.com/\\S+"
                    }, {
                        patterns: [{a: "ul>li>p>a:has(img)", img: "ul>li>p>a:has(img)>img", list: ".topicProList"}],
                        url: "www\\.yougou\\.com/topics"
                    }],
                    "139shop.com": [{
                        patterns: [{
                            a: "ul>li>dl>dd.pic1>a,ul>li>dl>dd.pic>a",
                            img: "ul>li>dl>dd.pic1>a>img,ul>li>dl>dd.pic>a>img", list: ".goodsList,#goods"
                        }], url: "(www|mobile)\\.139shop\\.com"
                    }],
                    "lefeng.com": [{
                        patterns: [{
                            a: ".imgs>a:has(img),.productlist>.propic>li>a",
                            img: ".imgs>a:has(img)>img,.productlist>.propic>li>a>img",
                            list: ".tabc"
                        }, {a: "dl>dd>a:has(img)", img: "dl>dd>a:has(img)>img", list: ".hotlist"}, {
                            a: ".imgs>a",
                            img: ".imgs>a>img",
                            list: "#clothing"
                        }], url: "www\\.lefeng\\.com/([?#]|$)"
                    }, {
                        patterns: [{
                            a: ".stj01>a:has(img),.spruList>ul>li>.ListPruPic>a",
                            img: ".stj01>a:has(img)>img,.spruList>ul>li>.ListPruPic>a>img",
                            list: ".tabarea"
                        }, {
                            a: "dl>dd>a:has(img)",
                            img: "dl>dd>a:has(img)>img",
                            list: ".hotlist"
                        }, {
                            a: ".spruList>ul>li>.ListPruPic>a,.spruAdR>a",
                            img: ".spruList>ul>li>.ListPruPic>a>img,.spruAdR>a>img",
                            list: ".spruarea"
                        }, {a: "dl>dt>a", img: "dl>dt>a>img", list: ".snj_pro"}, {
                            a: "dl>dt>a",
                            img: "dl>dt>a>img",
                            list: ".clean_prolist"
                        }], url: "www\\.lefeng\\.com/\\w+"
                    }, {
                        patterns: [{
                            a: ".tnNewBuyList>ul>li>.tnPruPic>a,.trynTopPru>ul>li>.tnPruPic>a",
                            img: ".tnNewBuyList>ul>li>.tnPruPic>a>img,.trynTopPru>ul>li>.tnPruPic>a>img",
                            list: ".tnNewbuy,.tnDownarea"
                        }],
                        url: "www\\.lefeng\\.com/newarrival\\.html"
                    }, {
                        patterns: [{a: "dt>a", img: ".plist>dt>a>img", list: ".contN"}],
                        url: "www\\.lefeng\\.com/brandstreet\\.html"
                    }, {
                        patterns: [{
                            a: ".clean_prolist>dl>dt>a",
                            img: "..clean_prolist>dl>dt>a>img",
                            list: ".jy_prolist"
                        }], url: "www\\.lefeng\\.com/zhuanti"
                    }, {
                        patterns: [{
                            a: ".bds_pruArea>.bds_pruCon>.bds_pruConL>dl>dt>a,dl>dt>a",
                            img: ".bds_pruArea>.bds_pruCon>.bds_pruConL>dl>dt>a>img,dl>dt>a>img",
                            list: ".bds_right,.pank"
                        }], url: "(product|www)\\.lefeng\\.com/brand/brandDetail\\.jsp"
                    }, {
                        patterns: [{
                            a: ".clean_prolist>dl>dt>a",
                            img: ".clean_prolist>dl>dt>a>img", list: ".activity_proinfo"
                        }, {a: "a", img: "a>img", list: "dt"}], url: "www\\.lefeng\\.com/zhuanti"
                    }],
                    "homevv.com": [{
                        patterns: [{
                            a: "ul>li>.pic>a",
                            img: "ul>li>.pic>a>img",
                            list: ".tab_content"
                        }, {a: "a", img: "a>img", list: "li.rank_1"}, {
                            a: "a",
                            img: "a>img",
                            list: "div.producepic"
                        }, {a: "a", img: "a>img", list: ".img"}, {a: "a", img: "a>img", list: "h2"}, {
                            a: "a:has(img)",
                            img: "a:has(img)>img",
                            list: "td"
                        }]
                    }],
                    "buy.qq.com": [{
                        patterns: [{a: "a>img", img: "li>a>img", list: ".mod_goods_list"}, {
                            a: "ul>li>a", img: "ul>li>a>img",
                            list: ".item"
                        }], url: "buy\\.qq\\.com/([?#]|$)"
                    }, {
                        patterns: [{
                            a: "div.img_wrap>a.img_wrap",
                            img: "div.img_wrap>a.img_wrap>img"
                        }, {a: "div.rank_content>a", img: "div.rank_content>a>img"}, {
                            a: "li>a",
                            img: "li>a>img",
                            list: ".mod_side_goods_list"
                        }], url: "buy\\.qq\\.com/book"
                    }],
                    "cart.tmall.com": [{
                        patterns: [{
                            a: "a",
                            img: "a>img",
                            list: ".m-col-img"
                        }, {
                            a: ".bd>.recommendCont>.recommendList>ul>li>.img>a",
                            img: ".bd>.recommendCont>.recommendList>ul>li>.img>a>img",
                            list: ".recommendBox"
                        }]
                    }],
                    "xiaoye.com": [{
                        patterns: [{
                            a: "div[class^=q_]>a,.xiaji>.xiaji_cont>div[class^=xj]>a,.xiangshui>.xiangshui_cont>div[class^=xiangs]>a,.jinghua>.jinghua_cont>div[class^=jingh]>a,.jiemian>.jiem_cont>div[class^=jiem]>a,.taozhuang>.taoz_cont>div[class^=taoz]>a,.xiaoyang>.xiaoyang_cont>a,.dapei>.dapei_cont>.dapei_top>a,#bfd_box_fu>.xiaoyang>ul>li>a:has(img)",
                            img: "div[class^=q_]>a>img,.xiaji>.xiaji_cont>div[class^=xj]>a>img,.xiangshui>.xiangshui_cont>div[class^=xiangs]>a>img,.jinghua>.jinghua_cont>div[class^=jingh]>a>img,.jiemian>.jiem_cont>div[class^=jiem]>a>img,.taozhuang>.taoz_cont>div[class^=taoz]>a>img,.xiaoyang>.xiaoyang_cont>a>img,.dapei>.dapei_cont>.dapei_top>a>img,#bfd_box_fu>.xiaoyang>ul>li>a:has(img)>img",
                            list: ".qg,.zhongjian"
                        }], url: "www\\.xiaoye\\.com/([?#]|$)"
                    }, {
                        patterns: [{
                            a: ".BomBoxItem>ul>li>a,.div1>.div1r>#ajaxcontent>.list1>ul>li>.cp1>.ListcpImg>a,.div1>.div1l>.ProHot>.ProHotBox>a,.div1>.div1l>.catebg>.ProHotBox>a",
                            img: ".BomBoxItem>ul>li>a>img,.div1>.div1r>#ajaxcontent>.list1>ul>li>.cp1>.ListcpImg>a>img,.div1>.div1l>.ProHot>.ProHotBox>a>img,.div1>.div1l>.catebg>.ProHotBox>a>img",
                            list: ".NewBodyBox"
                        }], url: "www\\.xiaoye\\.com/(\\w+[-]?\\w+/([?#]|$)|list\\.aspx)"
                    }],
                    "event.51buy.com": [{
                        patterns: [{
                            a: "li>a",
                            img: "li>a>img",
                            list: "ul[class^=item_list_]"
                        }, {a: "ul>li>a.img_wrap", img: "ul>li>a.img_wrap>img", list: ".bd"}, {
                            a: "a",
                            img: "a>img",
                            list: ".pic_wrap"
                        }, {a: "a:has(img)", img: "li>a:has(img)>img", list: ".list_sp"}]
                    }],
                    "naruko.com.cn": [{
                        patterns: [{
                            a: ".palm>ul>li>a,div[id^=rptRankTab]>.inner>div>a,.ob_body>.content>ul>li>.photo>a",
                            img: ".palm>ul>li>a>img,div[id^=rptRankTab]>.inner>div>a>img,.ob_body>.content>ul>li>.photo>a>img",
                            list: "div[id^=rankTab],.newpat,.promo_today"
                        }], url: "www\\.naruko\\.com\\.cn/shop/([?#]|$)"
                    }, {
                        patterns: [{
                            a: ".series>.series01>.series01_left>a",
                            img: ".series>.series01>.series01_left>a>img",
                            list: ".ui-tabs-panel"
                        }], url: "www\\.naruko\\.com\\.cn/shop/product/BrandGoods\\.aspx"
                    }, {
                        patterns: [{
                            a: "ul>li>table>tbody>tr>td>a,.list02_pic>a,.palm>ul>li>a",
                            img: "ul>li>table>tbody>tr>td>a>img,.list02_pic>a>img,.palm>ul>li>a>img",
                            list: ".product,div[id^=rankTab]"
                        }], url: "www\\.naruko\\.com\\.cn/shop/product/SearchResult\\.aspx"
                    }],
                    "2688.com": [{
                        patterns: [{
                            a: "#numlabel>.bd>ul>li>a,.portal>.portal-floor-bd>ul>li>dt.product>a,.bhtw>.dibusp>ul>li>a>span.img,.books>.portal-floor-bd>ul>li>dt.product>a,.dpbk>.youce>.bd>ul>li>a,.paihang>.index_content>.iccr_salelist>.iccrs_content>ul>li>.iccrsc_pic>div>a",
                            img: "#numlabel>.bd>ul>li>a>img,.portal>.portal-floor-bd>ul>li>dt.product>a>img,.bhtw>.dibusp>ul>li>a>span.img>img,.books>.portal-floor-bd>ul>li>dt.product>a>img,.dpbk>.youce>.bd>ul>li>a>img,.paihang>.index_content>.iccr_salelist>.iccrs_content>ul>li>.iccrsc_pic>div>a>img",
                            list: ".rexiao,.Channels,.dibunr,.zRanking,.Ranking"
                        }], url: "(www\\.)?2688\\.com/([?#]|$)"
                    }, {
                        patterns: [{
                            a: "ul>table>tbody>tr>td>li>dl>dt>a",
                            img: "ul>table>tbody>tr>td>li>dl>dt>a>img",
                            list: ".ProShow_List_3,.ProShow_List_4"
                        }], url: "(www\\.)?2688\\.com/Search/iResult\\.aspx"
                    }, {
                        patterns: [{
                            a: ".qianggoukuang>.qianggouzs>ul>li>a,.rexiao>#numlabel>.bd>ul li>a,.rementuijiankuang>.retu>ul>li>a,.flkuang>.flcp>ul>li>a",
                            img: ".qianggoukuang>.qianggouzs>ul>li>a>img,.rexiao>#numlabel>.bd>ul li>a>img,.rementuijiankuang>.retu>ul>li>a>img,.flkuang>.flcp>ul>li>a>img",
                            list: ".box"
                        }, {
                            a: ".spzh>.sp_tu>a,.sec_sp>.sec_tu>a,.btj_tuy>a",
                            img: ".spzh>.sp_tu>a>img,.sec_sp>.sec_tu>a>img,.btj_tuy>a>img",
                            list: ".beauty,.sec_zhong,.btj_tu"
                        }], url: "(www\\.)?2688\\.com/shop/\\w+\\.aspx"
                    }, {
                        patterns: [{
                            a: ".shangpin>.pinpai>ul>li>a,.paihang>ul>li>a",
                            img: ".shangpin>.pinpai>ul>li>a>img,.paihang>ul>li>a>img",
                            list: ".bd,.xiantiao"
                        }], url: "(\\w+\\.)shop\\.2688\\.com"
                    }, {
                        patterns: [{a: "a", img: "a>img", list: ".p-img"}, {a: "a", img: "a>img", list: ".lzw_img"}],
                        url: "/Handle/ShopCart\\.aspx"
                    }],
                    "vt.vancl.com": [{
                        patterns: [{
                            a: "li div>a",
                            img: "li div>a>img", list: "ul[class^=Cxtlist]"
                        }, {a: "li>div>div>a", img: "li>div>div>a>img", list: ".vtPrAreaUl"}, {
                            a: "li>a",
                            img: "li>a>img",
                            list: ".longT_cpList"
                        }]
                    }],
                    "www.yihaodian.com": [{
                        patterns: [{
                            a: "li>a",
                            img: "li>a>img",
                            list: ".pr_list"
                        }, {a: "li>a:has(img)", img: "li>a:has(img)>img", list: "#limitBuy"}],
                        url: "www\\.yihaodian\\.com/\\d+/([?#]|$)"
                    }, {
                        patterns: [{
                            a: ".producteg a[id^='pdlink1']",
                            img: ".producteg a[id^='pdlink1']>img",
                            list: "#search_result"
                        }, {
                            a: "a.img_box,.pic>a,.pmsSas>a.img_box",
                            img: "a.img_box>img,.pic>a>img,.pmsSas>a.img_box>img",
                            list: ".searchColSubItem,#hotcontainer,.view"
                        }], url: "www\\.yihaodian\\.com/ctg/s"
                    }, {
                        patterns: [{
                            a: "li>.pro_detail>a.pro_img",
                            img: "li>.pro_detail>a.pro_img>img",
                            list: ".pro_list"
                        }, {
                            a: ".productItemBox>.productItemBoxIn>.productPicBox>a",
                            img: ".productItemBox>.productItemBoxIn>.productPicBox>a>img",
                            list: ".productListBox"
                        }, {
                            a: "li>div[class^=img]>a",
                            img: "li>div[class^=img]>a>img",
                            list: "ul[class^=skin_1]"
                        }, {a: "li>div>a", img: "li>div>a>img", list: ".skin_1_4_list"}, {
                            a: "li>a:has(div)", img: "li>a:has(div)>.img160>img",
                            list: ".skin_1_5_list"
                        }, {a: "li>a:has(img)", img: "li>a:has(img)>img", list: ".fk_tab_content"}],
                        url: "www\\.yihaodian\\.com/cmsPage/show\\.do"
                    }],
                    "search.jd.com": [{
                        patterns: [{
                            a: ".p-img>a",
                            price: [{selector: ".p-price img", imgToItemLevel: 3}],
                            img: ".p-img>a>img"
                        }, {
                            priect: [{selector: ".mark-price img", imgToItemLevel: 3}],
                            a: ".i-img>a",
                            img: ".i-img>a>img"
                        }]
                    }],
                    "t.dangdang.com": [{
                        patterns: [{
                            a: "ul>li>.temp06_pic>a:has(img)",
                            img: "ul>li>.temp06_pic>a:has(img)>img",
                            list: ".temp06_list"
                        }, {a: "a", img: "a>img", list: ".pic"}, {
                            a: "ul>li>a",
                            img: "ul>li>a>img", list: ".con"
                        }]
                    }],
                    "jmall.jd.com": [{
                        patterns: [{
                            a: "ul>li>.jItem>.jPic>a,ul>li>.p-img>a",
                            img: "ul>li>.jItem>.jPic>a>img,ul>li>.p-img>a>img",
                            list: ".mc"
                        }]
                    }],
                    "search.1mall.com": [{
                        patterns: [{
                            a: "li>.itemSearchResultCon>.product_pic,.pmsCoc>a:has(img)",
                            img: "li>.itemSearchResultCon>.product_pic>img,.pmsCoc>a:has(img)>img",
                            list: ".itemSearchList,.conBox"
                        }]
                    }],
                    "jd.com": [{
                        patterns: [{
                            a: ".p-img a,.i-img>a",
                            price: [{selector: ".p-price img", imgToItemLevel: 3}, {
                                selector: ".p-price strong",
                                imgToItemLevel: 3
                            },
                                {selector: ".p-price span", imgToItemLevel: 3}, {
                                    selector: ".p-info strong img",
                                    imgToItemLevel: 4
                                }],
                            img: ".p-img a>img,.i-img>a>img"
                        }, {a: "dt>a", img: "dt>a>img"}],
                        url: "http://(www|book)\\.jd\\.com/(((?:(products|brands)/\\d+-[-\\d+]+)|(?:book|electronic|digital|computer))\\.html)?([?#]|$)"
                    }, {
                        patterns: [{a: "li>.p-img>a", img: "li>.p-img>a>img", list: ".five"}],
                        url: "\\w+\\.jd\\.com/"
                    }],
                    "list.xiu.com": [{patterns: [{a: "a", img: "a>img", list: ".pic"}], url: "list\\.xiu\\.com"}],
                    "okbuy.com": [{
                        patterns: [{
                            a: "ul>li>.frame>a",
                            img: "ul>li>.frame>a>img", list: ".productList"
                        }, {a: "ul>li>.img>a", img: "ul>li>.img>a>img", list: ".goodsList"}],
                        url: "www\\.okbuy\\.com/(product/filter\\?category|brand|product/search)?"
                    }],
                    "1mall.com": [{
                        patterns: [{
                            a: "li>a:has(img)",
                            img: "li>a:has(img)>img",
                            list: ".floorMain"
                        }, {a: "a:has(img)", img: "a:has(img)>img", list: ".itemSearchResultCon"}],
                        url: "www\\.1mall\\.com/\\d+/([?#]|$)"
                    }, {
                        patterns: [{a: "li>div>a", img: "li>div>a>img", list: ".skin_4_5_list"}, {
                            a: "li>a:has(div)",
                            img: "li>a:has(div) img",
                            list: ".skin_1_5_list"
                        },
                            {a: "a", img: "a>img", list: ".productPicBox"}, {
                                a: "li>.pro_pic>a",
                                img: "li>.pro_pic>a>img",
                                list: "ul[class^=pro_list]"
                            }], url: "www\\.1mall\\.com/cmsPage/show\\.do"
                    }, {
                        patterns: [{
                            a: "li>.itemSearchResultCon>.product_pic,.pmsCoc>a:has(img)",
                            img: "li>.itemSearchResultCon>.product_pic>img,.pmsCoc>a:has(img)>img",
                            list: ".itemSearchList,.conBox"
                        }], url: "www\\.1mall\\.com/ctg/"
                    }, {
                        patterns: [{a: "ul>a", img: "ul>a>li>span>img", list: ".tuanList"}, {
                            a: "ul>li>.pic>a",
                            img: "ul>li>.pic>a>img"
                        }, {
                            a: "a:has(img)", img: "a:has(img)>img",
                            list: ".pic"
                        }, {a: "a", img: "a>img", list: ".pro_box"}, {a: "dd>a", img: "dd>a>img", list: ".rank_list"}],
                        url: "\\w+\\.1mall\\.com"
                    }],
                    "act.51buy.com": [{
                        patterns: [{
                            a: ".item_inner>.pic_box>a",
                            img: ".item_inner>.pic_box>a>img",
                            list: ".item"
                        }, {a: "ul>li>a", img: "ul>li>a>img", list: ".item_list"}, {
                            a: "a",
                            img: "a>img",
                            list: ".pic_wrap"
                        }]
                    }],
                    "prom.gome.com.cn": [{
                        patterns: [{
                            a: ".hotpro>ul>li.propic>a",
                            img: ".hotpro>ul>li.propic>a>img",
                            list: ".wap"
                        }, {a: "a", img: "a>img", list: ".cximg_0510"}, {
                            a: "ul>li.zttp_img>a", img: "ul>li.zttp_img>a>img",
                            list: ".ztt_pro"
                        }]
                    }],
                    "ouku.com": [{
                        patterns: [{a: "a:has(img)", img: "a:has(img)>img", list: "#auction"}, {
                            a: "ul>li>.p>a",
                            img: "ul>li>.p>a>img",
                            list: ".p_list"
                        }, {
                            a: "ul>li>div.goods_s>a:has(img)",
                            img: "ul>li>div.goods_s>a:has(img)>img",
                            list: "#goods_inner"
                        }, {
                            a: "ul>li>.innerl>.c_img>a,ul>li>.innerr>ul>li>div>a",
                            img: "ul>li>.innerl>.c_img>a>img,ul>li>.innerr>ul>li>div>a>img",
                            list: "#ouku_commend_inner"
                        }, {
                            a: "ul>li[class^=l]>.innerl>.c_img>a",
                            img: "ul>li[class^=l]>.innerl>.c_img>a>img",
                            list: "#client_commend_inner"
                        }],
                        url: "(www\\.)?ouku\\.com/([?#]|$)"
                    }, {
                        patterns: [{
                            a: ".categoryList>li>a:has(img)",
                            img: ".categoryList>li>a:has(img)>img",
                            list: "#newGoods"
                        }, {
                            a: ".categoryList>li>a:has(img)",
                            img: ".categoryList>li>a:has(img)>img",
                            list: ".goodsList"
                        }, {a: "ul>li>a:has(img)", img: "ul>li>a:has(img)>img", list: "#categoryBest,#goodsTime"}],
                        url: "(www\\.)?ouku\\.com/[a-z]+[/]?$"
                    }, {
                        patterns: [{a: ".detailPic>a", img: ".detailPic>a>img", list: ".listDetail"}],
                        url: "(www\\.)ouku\\.com/\\w+(/\\?)?"
                    }],
                    "sale.360buy.com": [{
                        patterns: [{
                            a: "a", img: "a>img",
                            list: ".jPic"
                        }, {a: "a", img: "a>img", list: ".p-img"}]
                    }],
                    "d1.com.cn": [{
                        patterns: [{
                            a: "div[id!=tabxpqx1]>table>tbody>tr>td>p>a,.likelist1>ul>li>a:has(img)",
                            img: "div[id!=tabxpqx1]>table>tbody>tr>td>p>a>img,.likelist1>ul>li>a:has(img)>img",
                            list: ".tabxpqx,.likeall1"
                        }, {a: "a>img", img: "li>a>img", list: ".index_rqbk"}], url: "www\\.d1\\.com\\.cn/([?#]|$)"
                    }, {
                        patterns: [{
                            a: ".newlist>table>tbody>tr>td>ul>li>.lf>p>a,.gs_left_content>.gs_left_content_sub>a>img",
                            img: ".newlist>table>tbody>tr>td>ul>li>.lf>p>a>img,.gs_left_content>.gs_left_content_sub>a>img",
                            list: ".r_right,#Right,.gs_left_por"
                        }], url: "www\\.d1\\.com\\.cn/(result|search|result_rec)\\.jsp"
                    }, {
                        patterns: [{
                            a: ".newlist>ul>li>.lf>div>a",
                            img: ".newlist>ul>li>.lf>div>a>img",
                            list: ".center"
                        }], url: "www\\.d1\\.com\\.cn/html/result_rec\\.asp"
                    }, {
                        patterns: [{
                            a: ".jrtg>li>span>a:has(img),.gdmstlist>.gdmstlist_sub>a,.rxph>a,.rmpl>.rmplcontent>ul>li>a",
                            img: ".jrtg>li>span>a:has(img)>img,.gdmstlist>.gdmstlist_sub>a>img,.rxph>a>img,.rmpl>.rmplcontent>ul>li>a>img",
                            list: ".jrtg,.qyxz,.mrhf,.nshf,.grhl,.left"
                        }], url: "www\\.d1\\.com\\.cn/html/\\w+"
                    },
                        {
                            patterns: [{a: "a", img: "a>img", list: ".cartl,.othertd"}, {
                                a: "li>a:has(img)",
                                img: "li>a:has(img)>img",
                                list: "ul[id^=carouse]"
                            }], url: "flow\\.jsp"
                        }],
                    "channel.yihaodian.com": [{
                        patterns: [{
                            a: ".clProBox>ul.clProList1>li>.proImg>a",
                            img: ".clProBox>ul.clProList1>li>.proImg>a>img",
                            list: ".clContent1,.clChannel"
                        }, {a: "a:has(img)", img: "a:has(img)>img", list: ".pic"}],
                        url: "channel\\.yihaodian\\.com/[a-z]+/\\d+/"
                    }],
                    "mall.360buy.com": [{
                        patterns: [{a: "a", img: "a>img", list: "td,th"}, {
                            a: "li>.p-img>a",
                            img: "li>.p-img>a>img",
                            list: ".goods-list"
                        }]
                    }],
                    "likeface.com": [{
                        patterns: [{
                            a: ".subCol>.gO_O>a,.pdtlist>li>a",
                            img: ".subCol>.gO_O>a>img,.pdtlist>li>a>img",
                            list: "#tuangou_v6,.sortCnt"
                        }], url: "([www\\.]?|^[likeface])\\.com/([?#]|$)"
                    }, {
                        patterns: [{
                            a: ".gHot>.tHotList>li>a:has(img),.gList>.gPdtList>li>a:has(img),.gBanner>a",
                            img: ".gHot>.tHotList>li>a:has(img)>img,.gList>.gPdtList>li>a:has(img)>img,.gBanner>a>img",
                            list: ".gMain"
                        }], url: "(www\\.)?likeface\\.com/(bt/\\w+|bst/\\w+|productlist\\.shtml\\?)"
                    }, {
                        patterns: [{
                            a: ".tLst2>li>a.tImg,.gPdtBarSet>li>a:has(img)",
                            img: ".tLst2>li>a.tImg>img,.gPdtBarSet>li>a:has(img)>img", list: ".pPlmain,.gPlmLe_set"
                        }], url: "(www\\.)?likeface\\.com/(s-\\S+|search)\\.shtml"
                    }, {
                        patterns: [{a: "li>a:has(img)", img: "li>a:has(img)>img", list: ".gBMS_pdtLst"}],
                        url: "([^w{3}]|\\w+)\\.likeface\\.com/([?#]|$)"
                    }, {
                        patterns: [{a: "ul>li>a", img: "ul>li>a>img", list: ".tsCtnBdy"}, {
                            a: "a",
                            img: "a>img",
                            list: ".tdNm"
                        }, {a: "li a[class!=tAdd]", img: "li a[class!=tAdd]>img", list: ".tGiftList"}],
                        url: "/member/cart\\.shtml"
                    }],
                    "search.suning.com": [{
                        patterns: [{
                            a: "li>a",
                            img: "li>a>img", list: "#proShow,.navBar .resultW"
                        }, {a: "li>.bookCoverBox>a", img: "li>.bookCoverBox>a>img", list: "#proList"}],
                        url: "/emall/(search.do|pcd.do|strd.do|bookSearch.do)"
                    }],
                    "wl.cn": [{
                        patterns: [{
                            a: "li.bdb>p>a:has(img),.sidecon>p>a:has(img)",
                            img: "li.bdb>p>a:has(img)>img,.sidecon>p>a:has(img)>img",
                            list: ".books,.tjbooks,.newp"
                        }], url: "(www\\.)?wl\\.cn/([?#]|$)"
                    }, {
                        patterns: [{
                            a: ".sidecon>p.tac>a:has(img),.mbd>ul>li.layout>a:has(img)",
                            img: ".sidecon>p.tac>a:has(img)>img,.mbd>ul>li.layout>a:has(img)>img",
                            list: ".sidelisttop,.mlist"
                        }], url: "(www\\.)?wl\\.cn/c\\d+"
                    }, {
                        patterns: [{
                            a: "ul.layout>li>p>a:has(img)",
                            img: "ul.layout>li>p>a:has(img)>img",
                            list: ".newbook,.tjbooks,.hotbooks,.recommend"
                        }, {a: "dl>dt>a", img: "dl>dt>a>img", list: ".ztcont"}], url: "(www\\.)?wl\\.cn/\\S+"
                    }],
                    "fengshangzhi.yintai.com": [{patterns: [{a: "a:has(img)", img: "a:has(img)>img"}]}],
                    "buy.51buy.com": [{
                        patterns: [{a: "a", img: "a>img", list: ".img"}, {
                            a: ".item>a",
                            img: ".item>a>img",
                            list: ".goods_list"
                        }]
                    }],
                    "letao.com": [{
                        patterns: [{
                            a: "ul>li>a", img: "ul>li>a>img",
                            list: ".zt_productlist"
                        }], url: "www\\.letao\\.com/([?#]|$)"
                    }, {
                        patterns: [{a: "li>a", img: "li>a>img", list: "#prodlist"}],
                        url: "www\\.letao\\.com/(shoe|s)"
                    }, {
                        patterns: [{a: "a", img: "a>img", list: ".plisttemp3"}, {a: "a", img: "a>img", list: "td"}],
                        url: "www\\.letao\\.com/\\S+"
                    }],
                    "dushuhui.360buy.com": [{patterns: [{a: "a", img: "a>img", list: ".p-img"}]}],
                    "search.yihaodian.com": [{
                        patterns: [{
                            a: ".producteg a[id^='pdlink1']",
                            img: ".producteg a[id^='pdlink1']>img",
                            list: "#search_result"
                        }, {
                            a: "a.img_box,.pic>a", img: "a.img_box>img,.pic>a>img",
                            list: ".searchColSubItem"
                        }]
                    }],
                    "bang.dangdang.com": [{
                        patterns: [{
                            a: ".book_pic>a",
                            img: ".book_pic>a>img",
                            list: ".right_list"
                        }]
                    }],
                    "ebay.xiu.com": [{patterns: [{a: "a", img: "a>img", list: ".pic"}], url: "/(list|brand)"}],
                    "search.china-pub.com": [{
                        patterns: [{a: "a:nth-child(1)", img: "a:nth-child(1)>img", list: "pre"}],
                        url: "http://search\\.china-pub\\.com/s/"
                    }],
                    "www.coo8.com": [{
                        patterns: [{
                            a: ".products .name>a",
                            img: ".products .pic>a>img",
                            list: ".floor-con,.hotscreen"
                        }], url: "www\\.coo8\\.com/([?#]|$)"
                    }, {
                        patterns: [{
                            a: "a", img: "a>img",
                            list: ".pic"
                        }], url: "www\\.coo8\\.com/(coo8/|products/\\S+\\.html)"
                    }, {
                        patterns: [{a: "p.pic>a", img: "p.pic>a>img", list: ".tab-hot-modules-3"}, {
                            a: "p.p-image>a",
                            img: "p.p-image>a>img",
                            list: ".products"
                        }, {a: "a", img: "a>img", list: ".pic"}, {a: "a", img: "a>img", list: ".icon"}],
                        url: "www\\.coo8\\.com/\\w+/$"
                    }, {
                        patterns: [{a: ".pic>a:has(img)", img: ".pic>a:has(img)>img", list: ".item"}],
                        url: "www\\.coo8\\.com/actnew"
                    }],
                    "list.51buy.com": [{
                        patterns: [{
                            a: ".item_list>a.link_pic,.top>a,.litpic>a.img_wrap",
                            img: ".item_list>a.link_pic>img,.top>a>span.img>img,.litpic>a.img_wrap>img",
                            list: ".list_goods,.list_topcommend"
                        }, {
                            a: ".inner>.bd>.list>li>a,.inner>.bd>.list_goods>li>a.img",
                            img: ".inner>.bd>.list>li>a>img,.inner>.bd>.list_goods>li>a.img>img",
                            list: ".mod_aider"
                        }]
                    }],
                    "sephora.cn": [{
                        patterns: [{
                            a: ".indTabCont>div>ol>li>p>a,.proExp>dd>a",
                            img: ".indTabCont>div>ol>li>p>a>img,.proExp>dd>a>img",
                            list: ".mainL,.mainR"
                        }], url: "www\\.sephora\\.cn/([Index.shtml|?#]|$)"
                    }, {
                        patterns: [{
                            a: "div[class^=sConInner]>ul>li>p>a,.proSmall>.lineDotH3>li>a,.proExp>dd>a",
                            img: "div[class^=sConInner]>ul>li>p>a>img,.proSmall>.lineDotH3>li>a>img,.proExp>dd>a>img",
                            list: "div[class^=sConOut],.mainR"
                        }],
                        url: "www\\.sephora\\.cn/(Search|secondThirdProduct[Ll]ist|thirdProduct[Ll]ist|showProductAction)/\\w+\\.html"
                    }, {
                        patterns: [{a: "ul>li>p>a:has(img)", img: "ul>li>p>a:has(img)>img", list: ".sConInner"}],
                        url: "www\\.sephora\\.cn/Search\\.html"
                    }, {
                        patterns: [{
                            a: ".sConInner4>ul.sConlist>li>p>a",
                            img: ".sConInner4>ul.sConlist>li>p>a>img",
                            list: ".excPro"
                        }], url: "www\\.sephora\\.cn/exclusiveAction\\.html"
                    }, {patterns: [{a: "a", img: "a>img", list: "td"}], url: "/viewCart\\.html"}],
                    "search.wl.cn": [{
                        patterns: [{
                            a: "li.layout>a",
                            img: "li.layout>a>img", list: ".mbd"
                        }], url: "search\\.wl.cn/search\\.aspx"
                    }],
                    "tmall.com": [{
                        patterns: [{a: "ul>li>a", img: "ul>li>a>img", list: ".bottom_mian"}],
                        url: "www\\.tmall\\.com/go/act"
                    }, {
                        patterns: [{a: "table>tbody>tr>td>a", img: "table>tbody>tr>td>a>img", list: ".custom-area"}],
                        url: "\\w+\\.tmall\\.com/view_page"
                    }],
                    "list.jd.com": [{patterns: [{a: ".p-img>a", img: ".p-img>a>img"}]}],
                    "koubei.jumei.com": [{
                        patterns: [{
                            a: ".products-list>li>div.pic>a",
                            img: ".products-list>li>div.pic>a>img",
                            list: ".box_container"
                        }]
                    }],
                    "search.jumei.com": [{
                        patterns: [{
                            a: "table>tbody>tr>td>a,.product_container>.left_part>a",
                            img: "table>tbody>tr>td>a>img,.product_container>.left_part>a>img",
                            list: ".num_warp_list_pic_top,.content"
                        }, {a: "a", img: "a>img", list: "div[class^=num_warp_list_pic]"}]
                    }],
                    "search.xiu.com": [{patterns: [{a: "a", img: "a>img", list: ".pic"}]}],
                    "redbaby.com.cn": [{
                        patterns: [{a: "a", img: "a>img", list: ".pic"}],
                        url: "www\\.redbaby\\.com\\.cn/([?#]|$)"
                    }, {
                        patterns: [{a: "a", img: "a>img", list: ".pic"}, {
                            a: "a",
                            img: "a>img",
                            list: ".globalProductPic"
                        }, {a: "a", img: "a>img", list: ".bookChannel_ExpertGoodsPic"}, {
                            a: "a",
                            img: "a>img",
                            list: ".featureGoodsPic"
                        },
                            {a: "a", img: "a>img", list: ".goodsPic"}], url: "/\\w+"
                    }],
                    "s.vancl.com": [{
                        patterns: [{
                            a: "ul>li>.pic>a",
                            img: "ul>li>.pic>a>img",
                            list: "div[class^=pruarea]"
                        }, {a: "li>div>.wyimg>a", img: "li>div>.wyimg>a>img", list: ".wytoplist"}]
                    }],
                    "brand.xiu.com": [{patterns: [{a: "a", img: "a>img", list: ".pic"}]}],
                    "shop.1mall.com": [{patterns: [{a: "ul>li>.pic>a", img: "ul>li>.pic>a>img,"}]}],
                    "bookschina.com": [{
                        patterns: [{a: "ul>li>a", img: "ul>li>a>img", list: ".mainrecommendations"}, {
                            a: ".recommended>ul>li>div>a", img: ".recommended>ul>li>div>a>img",
                            list: ".categorybookfair"
                        }, {a: "a", img: "a>img", list: ".themainpush"}, {
                            a: "ul>li>div>a",
                            img: "ul>li>div>a>img",
                            list: ".recommendedother,.ultralowcostarea"
                        }, {a: "ul>li.pw>a", img: "ul>li.pw>a>img", list: ".dzjs"}],
                        url: "www\\.bookschina\\.com/([?#]|$)"
                    }, {
                        patterns: [{a: "ul>li>a", img: "ul>li>a>img", list: ".mainrecommendations"}, {
                            a: "a:has(img)",
                            img: "a:has(img)>img",
                            list: ".chimainpush,.channelsthemainpush"
                        }, {a: "ul>li>div>a", img: "ul>li>div>a>img", list: ".channelsrecommended"}, {
                            a: "ul>li>div>a",
                            img: "ul>li>div>a>img",
                            list: ".channelsother,.chilowarea"
                        },
                            {a: "ul>li>div>a", img: "ul>li>div>a>img", list: ".channelslowarea"}],
                        url: "www\\.bookschina\\.com/books/\\w+"
                    }, {
                        patterns: [{
                            a: ".bookpic>a,div[align=center]>a",
                            img: ".bookpic>a>img,div[align=center]>a>img",
                            list: ".bookContent,.leftbj"
                        }], url: "www\\.bookschina\\.com/(kinder|books/kind|book_find)"
                    }],
                    "51buy.com": [{
                        patterns: [{
                            a: ".pic_wrap>a",
                            img: ".pic_wrap>a>img",
                            list: ".goods_list,.mod_quickbuy"
                        }], url: "http://(www\\.)?51buy\\.com/([?#]|$)"
                    }, {
                        patterns: [{
                            a: ".mod_sort>.inner>.bd .goods_list>.item>a.img_wrap,.mod_sort>.inner>.bd>.col_right>.mod_rank>.mod_bd>.list_paihang>.top>a,li>.wrap_goods>a.img,.goods_pic>a.img",
                            img: ".mod_sort>.inner>.bd .goods_list>.item>a.img_wrap>img,.mod_sort>.inner>.bd>.col_right>.mod_rank>.mod_bd>.list_paihang>.top>a img,li>.wrap_goods>a.img>img,.goods_pic>a.img>img",
                            list: ".i_col3,.list_pinglun,.goods_qiang"
                        }], url: "http://www.51buy.com/\\w+_\\w+\\.html\\?"
                    }],
                    "s.51buy.com": [{
                        patterns: [{
                            a: ".item_list>a.link_pic",
                            img: ".item_list>a.link_pic>img",
                            list: ".list_goods"
                        }, {a: "li>a", img: "li>a img", list: ".sidebar .list_goods"}]
                    }],
                    "searchex.buy.qq.com": [{
                        patterns: [{
                            a: "ul>li>div>a", img: "ul>li>div>a>img",
                            list: ".good_list"
                        }, {a: "ul>li>a", img: "ul>li>a>img", list: ".bd"}, {
                            a: "li>div>a",
                            img: "li>div>a>img",
                            list: ".hg_list"
                        }, {a: "#viewedGoodsList>li>a", img: "#viewedGoodsList>li>a>img"}]
                    }],
                    "3c.tmall.com": [{
                        patterns: [{
                            a: "p.s_picshow>a",
                            img: "p.s_picshow>a>img",
                            list: ".singleP,.pairP-goodPic"
                        }, {a: "a", img: "a>img", list: ".pairP-goodPic"}, {
                            a: "li>.to-pic>a",
                            img: "li>.to-pic>a>img",
                            list: ".to-picshow"
                        }, {a: "li>dl>dt.pic>a:has(img)", img: "li>dl>dt.pic>a:has(img)>img", list: ".citem"}]
                    }],
                    "promo.dangdang.com": [{
                        patterns: [{
                            a: "li>.pic>a",
                            img: "li>.pic>a>img", list: ".pro_list"
                        }]
                    }],
                    "search.2688.com": [{
                        patterns: [{
                            a: "ul>table>tbody>tr>td>li>dl>dt>a",
                            img: "ul>table>tbody>tr>td>li>dl>dt>a>img",
                            list: ".ProShow_List_3,.ProShow_List_4"
                        }]
                    }],
                    "s.lefeng.com": [{
                        patterns: [{a: "dl>dt>a", img: "dl>dt>a>img", list: ".fL"}, {
                            a: "dl>dt>a",
                            img: "dl>dt>a>img",
                            list: ".pank"
                        }]
                    }],
                    "xiu.com": [{
                        patterns: [{
                            a: ".tab_con>ul>li>a",
                            img: ".tab_con>ul>li>a>img",
                            list: ".bord_box"
                        }, {a: "dl>dt>a", img: "dl>dt>a>img", list: ".tab_con"}], url: "www\\.xiu\\.com/\\w+\\.html"
                    }],
                    "binggo.com": [{
                        patterns: [{
                            a: "a",
                            img: "a>img", list: ".pic"
                        }, {a: "a", img: "a>img", list: ".goodsPic"}], url: "www.binggo.com/([?#]|$)"
                    }, {
                        patterns: [{
                            a: "ul>li>div.globalProductPic>a",
                            img: "ul>li>div.globalProductPic>a>img",
                            list: ".listProduct"
                        }, {a: "a", img: "a>img", list: ".pic"}, {a: "a", img: "a>img", list: ".goodsPic"}, {
                            a: "a",
                            img: "a>img",
                            list: ".ClockPic"
                        }, {a: "a", img: "a>img", list: "dt"}, {a: ".goodsPic>a", img: ".goodsPic>a>img"}],
                        url: "www.binggo.com/\\w+"
                    }],
                    "3c.dangdang.com": [{
                        patterns: [{a: "li.pic>a:has(img)", img: "li.pic>a:has(img)>img", list: "ul[name^=M]"},
                            {
                                a: "li.pic>a:has(img)",
                                img: "li.pic>a:has(img)>img",
                                list: "ul[name^=L]"
                            }, {
                                a: ".pic>a:has(img)",
                                img: ".pic>a:has(img)>img",
                                list: "li[name^=RD]"
                            }, {
                                a: "ul>li>span[class$=_pic]>a",
                                img: "ul>li>span[class$=_pic]>a>img",
                                list: "div[class$=_list]"
                            }, {a: "a", img: "a>img", list: "td"}, {a: "li>a", img: "li>a>img"}, {
                                a: "li>a:has(img)",
                                img: "li>a:has(img)>img",
                                list: "ul.list_aa"
                            }]
                    }],
                    "party.buy.qq.com": [{
                        patterns: [{a: "li>a", img: "li>a>img", list: ".goodslist"}, {
                            a: "li>a",
                            img: "li>a>img",
                            list: "#tuan_col_big"
                        }]
                    }],
                    "cart.360buy.com": [{
                        patterns: [{
                            a: "a",
                            img: "a>img", list: ".p-img"
                        }]
                    }],
                    "newsearch.dangdang.com": [{
                        patterns: [{
                            a: ".pic>a",
                            img: ".pic>a>img",
                            list: ".resultlist,.piclist,.category_siderbar,.list_siderbar,.publish_siderbar"
                        }]
                    }],
                    "shopping.dangdang.com": [{
                        patterns: [{a: "a", img: "a>img", list: ".pic"}, {
                            a: "a:has(img)",
                            img: "a:has(img)>img",
                            list: "li[class^=row]"
                        }]
                    }],
                    "www.newegg.com.cn": [{
                        patterns: [{
                            a: "li>.cls>.img>a,li>.img>a",
                            img: "li>.cls>.img>a>img,li>.img>a>img",
                            list: ".ranklist,.prolist"
                        }], url: "www\\.newegg\\.com\\.cn/([?#]|$)"
                    }, {
                        patterns: [{
                            a: ".itemCell>.inner>dt>a",
                            img: ".itemCell>.inner>dt>a>img", list: ".itemGrid"
                        }], url: "www\\.newegg\\.com\\.cn/(Search.aspx|(Sub)?Category/[-\\d]+.htm)"
                    }, {
                        patterns: [{a: "dt>span>a", img: "dt>span>a>img", list: ".productItembox"}, {
                            a: "a",
                            img: "a>img",
                            list: "p[id^=productImgHtml]"
                        }], url: "www\\.newegg\\.com\\.cn/Promotion"
                    }, {
                        patterns: [{a: ".inner>dt>a", img: ".inner>dt>a>img", list: ".itemCell"}],
                        url: "www\\.newegg\\.com\\.cn/\\S+\\.htm"
                    }, {
                        patterns: [{a: "a", img: "a>img", list: ".img"}, {a: "dt>a", img: "dt>a>img", list: ".inner"}],
                        url: "www\\.newegg\\.com\\.cn/Shopping/ShoppingCart\\.aspx"
                    }],
                    "mem.139shop.com": [{patterns: [{a: "a:has(img)", img: "a:has(img)>img", list: "td"}]}],
                    "mall.jumei.com": [{
                        patterns: [{
                            a: ".sr_list>ul>li>.sr_con>a,.maskitem>a",
                            img: ".sr_list>ul>li>.sr_con>a>img,.maskitem>a>img",
                            list: ".fc_sale_rank,.fc_main"
                        }], url: "mall\\.jumei\\.com/([?#]|$)"
                    }, {
                        patterns: [{
                            a: "table>tbody>tr>td>a,.product_container>.left_part>a",
                            img: "table>tbody>tr>td>a>img,.product_container>.left_part>a>img",
                            list: ".num_warp_list_pic_top,.content"
                        }, {a: "a", img: "a>img", list: "div[class^=num_warp_list_pic]"}],
                        url: "mall\\.jumei\\.com/products/"
                    }],
                    "cart.jd.com": [{patterns: [{a: "a", img: "a>img", list: ".p-img"}]}],
                    "vancl.com": [{
                        patterns: [{a: "a", img: "a>img", list: "div[class^=adProductArea0]"}],
                        url: "www\\.vancl\\.com/([?#]|$)"
                    }, {
                        patterns: [{
                            a: "ul>li>strong>a",
                            img: "ul>li>strong>a>img",
                            list: ".productList"
                        }, {a: "ul>li>a", img: "ul>li>a>img", list: ".Hot_Ranking"}, {
                            a: "ul>li>a",
                            img: "ul>li>a>img",
                            list: ".Hot_Comment"
                        }, {a: "ul>li>a", img: "ul>li>a>img", list: ".flr_List"}, {
                            a: "ul>li>a",
                            img: "ul>li>a>img",
                            list: ".hwNewTabBodyList"
                        }, {
                            a: "li>a",
                            img: "li>a>img", list: ".ul_ScrCont"
                        }, {a: "li>a", img: "li>a>img", list: ".fr,.fl"}, {
                            a: "ul>li>div>a",
                            img: "ul>li>div>a>img",
                            list: "div[class^=newProductCon]"
                        }, {a: "ul>li>a", img: "ul>li>a>img", list: "div[class=MenList]"}, {
                            a: "li>div>a",
                            img: "li>div>a>img",
                            list: ".ladyProList"
                        }, {a: "a", img: "a>img", list: "div[class^=ladyNewAd]"}, {
                            a: "ul>li>.pic>a",
                            img: "ul>li>.pic>a>img",
                            list: ".ladySquarePro"
                        }, {a: "a", img: "a>img", list: ".ladyRecomdLi02"}, {
                            a: "a",
                            img: "a>img",
                            list: ".pic"
                        }, {a: "a", img: "a>img", list: "div[class^=pd_newmsg_]"}, {
                            a: "a",
                            img: "a>img", list: "div[class$=_img]"
                        }, {a: "ul>li>a", img: "ul>li>a>img", list: "div[class$=_rig]"}], url: "\\w+\\.vancl\\.com"
                    }],
                    "360buy.com": [{
                        patterns: [{
                            a: ".p-img>a,.i-img>a",
                            price: [{selector: ".p-price img", imgToItemLevel: 3}, {
                                selector: ".p-price strong",
                                imgToItemLevel: 3
                            }, {selector: ".p-price span", imgToItemLevel: 3}, {
                                selector: ".p-info strong img",
                                imgToItemLevel: 4
                            }],
                            img: ".p-img>a>img,.i-img>a>img",
                            list: "body"
                        }, {a: "dt>a", img: "dt>a>img"}],
                        url: "http://(www|book)\\.360buy\\.com/(((?:(products|brands)/\\d+-[-\\d+]+)|(?:book|electronic|digital|computer))\\.html)?([?#]|$)"
                    },
                        {
                            patterns: [{a: "li>.p-img>a", img: "li>.p-img>a>img", list: ".five"}],
                            url: "\\w+\\.360buy\\.com/"
                        }],
                    "yintai.com": [{
                        patterns: [{a: "a", img: "a>img", list: ".item-show"}],
                        url: "www\\.yintai\\.com/([?#]|$)"
                    }, {
                        patterns: [{a: ".p-listImgBig>a", img: ".p-listImgBig>a>img", list: ".p-listMain"}, {
                            a: "a",
                            img: "a>img",
                            list: ".pro-img"
                        }], url: "www\\.yintai\\.com/(product|store|mycheckout)/(list-|search)?"
                    }, {patterns: [{a: "a", img: "a>img", list: ".c-pic"}], url: "www\\.yintai\\.com/channel/"}],
                    "promotion.yintai.com": [{
                        patterns: [{
                            a: "a:has(img)",
                            img: "a:has(img)>img"
                        }]
                    }],
                    "mall.jd.com": [{
                        patterns: [{a: "a", img: "a>img", list: "td,th"}, {
                            a: "li>.p-img>a",
                            img: "li>.p-img>a>img",
                            list: ".goods-list"
                        }]
                    }],
                    "justbb.com": [{
                        patterns: [{
                            a: ".clearfix>a,div[class^=goodsItem]>a",
                            img: ".clearfix>a>img,div[class^=goodsItem]>a>img",
                            list: ".maincontent,#tab_v"
                        }], url: "www\\.justbb\\.com/(index\\.php|[?#]|$)"
                    }, {
                        patterns: [{a: ".goodsItem_c>a", img: ".goodsItem_c>a>img", list: ".goodsBox_c"}],
                        url: "www\\.justbb\\.com/(category|search)\\.php"
                    }],
                    "www.gome.com.cn": [{
                        patterns: [{
                            a: ".pic>a",
                            img: ".pic>a>img", list: ".listMain .box"
                        }, {a: ".ulhide>ul>li>a", img: ".ulhide>ul>li>a>img", list: ".maincenter"}, {
                            a: "li>a",
                            img: "li>a>span>img",
                            list: ".book-list"
                        }, {a: "a", img: "a>img", list: ".lists-bigimg"}, {
                            a: "a",
                            img: "a>img",
                            list: ".list-sideprice"
                        }],
                        url: "www\\.gome\\.com\\.cn/ec/homeus/(atgsearch/gomeSearchResults\\.jsp|browse/productlist/productList\\.jsp|jump/category|n/search)"
                    }, {
                        patterns: [{a: "a", img: "a>img", list: ".j-hoverbox"}],
                        url: "www\\.gome\\.com\\.cn/ec/homeus/jump/ranking"
                    }, {
                        patterns: [{
                            a: ".imgshow li>a",
                            img: ".imgshow li>a>img", list: "body"
                        }], url: "www\\.gome\\.com\\.cn/ec/homeus(/index.html)?([?#]|$)"
                    }, {
                        patterns: [{
                            a: ".box>ul>li>.pic>a,.box>.plist>ul>li>.pic>a",
                            img: ".box>ul>li>.pic>a>img,.box>.plist>ul>li>.pic>a>img",
                            list: ".recommendYou3,.newRecommend,.cProduct"
                        }, {
                            a: ".box>ul>li>.pic>a",
                            img: ".box>ul>li>.pic>a>img",
                            list: ".scanGoods"
                        }, {a: "li>a:has(img)", img: "li>a:has(img)>img", list: ".specialbooks"}, {
                            a: "li>a",
                            img: "li>a>img",
                            list: ".sublistul"
                        }, {a: "li>a", img: "li>a>img", list: ".ztbook"}, {
                            a: "a:has(img)", img: "a:has(img)>img",
                            list: ".newopen"
                        }, {a: "a", img: "a>img", list: ".pic"}], url: "www\\.gome\\.com\\.cn/ec/homeus/\\w+\\.html"
                    }, {
                        patterns: [{a: "a", img: "a>img", list: ".lowlight"}],
                        url: "www\\.gome\\.com\\.cn/ec/homeus/cart/cart\\.jsp"
                    }],
                    "search.lefeng.com": [{
                        patterns: [{
                            a: ".makeup>dl>dt>a,.pank>dl>dt>a",
                            img: ".makeup>dl>dt>a>img,.pank>dl>dt>a>img",
                            list: ".list,.sidebar"
                        }]
                    }],
                    "static.dangdang.com": [{
                        patterns: [{
                            a: "a:has(img)",
                            img: "a:has(img)>img"
                        }, {a: "a[name!=buybutton]", img: "a[name!=buybutton]>img", list: "td[align=middle]"}]
                    }],
                    "99read.com": [{
                        patterns: [{
                            a: ".W95-list>dd a",
                            img: ".W95-list>dd a>img", list: ".XinPRX-box"
                        }, {
                            a: ".list-center170>.imgA170-120>a",
                            img: ".list-center170>.imgA170-120>a>img",
                            list: ".list568-textA"
                        }, {
                            a: "div[class^=img]>a",
                            img: "div[class^=img]>a>img",
                            list: "dl[class^=list250-text]"
                        }, {
                            a: ".list220-textB>li>dl>div>a",
                            img: ".list220-textB>li>dl>div>a>img",
                            list: ".XianShiQG"
                        }, {a: "a", img: "a>img", list: "div[class^=list_r_list_img]"}, {
                            a: "a",
                            img: "a>img",
                            list: ".img85"
                        }], url: "(www\\.)?99read\\.com/"
                    }],
                    "dushuhui.jd.com": [{patterns: [{a: "a", img: "a>img", list: ".p-img"}]}],
                    "hmeili.com": [{
                        patterns: [{
                            a: ".floor>div[class^=floor] a",
                            img: ".floor>div[class^=floor] a>img",
                            list: ".wrap"
                        }], url: "www\\.hmeili\\.com/([?#]|$)"
                    }, {
                        patterns: [{
                            a: ".hd>.top5>li>p>a,.productlist>ul>li>p>a",
                            img: ".hd>.top5>li>p>a>img,.productlist>ul>li>p>a>img",
                            list: ".cate-left,.cate-list"
                        }], url: "www\\.hmeili\\.com/(category|search\\.php)"
                    }],
                    "www.amazon.cn": [{
                        patterns: [{
                            a: "a.title",
                            img: "a.title>.imageContainer>img",
                            list: ".unified_widget,#rhf_container"
                        }, {
                            a: ".rankedItemImage>a", img: ".rankedItemImage>a>img",
                            list: "#rightcol"
                        }], url: "http://www\\.amazon\\.cn/([?#]|(ref=\\S+)?$)"
                    }, {
                        patterns: [{a: ".image>a", img: ".image>a>img.productImage", list: "#rightResultsATF"}, {
                            a: "a",
                            img: "a>img",
                            list: ".productImage"
                        }, {a: "a.ilo", img: "a.ilo>img", list: ".ilf"}], url: "http://www\\.amazon\\.cn/s[?/]"
                    }, {
                        patterns: [{
                            a: "a.title,div[class!=localImage]>a",
                            img: "a.title>.imageContainer>img,div[class!=localImage]>a>img",
                            list: ".inner,.rankedItemImage"
                        }, {
                            a: ".unified_widget>table>tbody>tr>td>a", img: ".unified_widget>table>tbody>tr>td>a>img",
                            list: "#rightcolbtf"
                        }, {a: "a", img: "a>img", list: ".image"}, {
                            a: "a",
                            img: "a>img",
                            list: ".rankedItemImage"
                        }, {a: "a", img: "a>img", list: ".prodImage"}],
                        url: "http://www\\.amazon\\.cn/(\\S+/)?b/ref=\\S+"
                    }, {
                        patterns: [{a: "a", img: "a>img", list: "td"}, {
                            a: "a:has(img)",
                            img: "a:has(img)>img",
                            list: ".csldImage"
                        }, {a: ".inner>div>a", img: ".inner>div>a>.imageContainer>img", list: ".fluid"}, {
                            a: "td>a",
                            img: "td>a>img",
                            list: ".small"
                        }, {a: "a>img", img: "td>a>img", list: ".content"}],
                        url: "www\\.amazon\\.cn/gp/feature\\.html/ref=\\S+"
                    }, {
                        patterns: [{
                            a: ".productImage>a",
                            img: ".productImage>a>img", list: ".result"
                        }, {a: "a", img: "a>img", list: ".zg_image"}, {
                            a: "a",
                            img: "a>img",
                            list: ".productImage"
                        }, {a: "a.ilo", img: "a.ilo>img", list: ".ilf"}],
                        url: "www\\.amazon\\.cn/gp/(browse|bestsellers|search)"
                    }, {
                        patterns: [{a: "a", img: "a>img", list: ".hlb-product,.hlb-item"}, {
                            a: "a",
                            img: "a>img",
                            list: ".item-image"
                        }, {a: "div>a", img: "div>a>div>img", list: ".shoveler-cell"}], url: "www\\.amazon\\.cn/gp/cart"
                    }],
                    "buy.coo8.com": [{
                        patterns: [{a: "a", img: "a>img", list: ".pic"}, {
                            a: "ul>li>a",
                            img: "ul>li>a>img",
                            list: ".bfd_cart"
                        }]
                    }],
                    "sh.jumei.com": [{patterns: [{a: "a", img: "a>img", list: ".pic"}]}],
                    "dangdang.com": [{
                        patterns: [{a: "ul.shoplist>li>a", img: "ul.shoplist>li>a>img"}],
                        url: "http://(www\\.)?dangdang\\.com/([?#]|$)"
                    }, {
                        patterns: [{
                            a: "ul>li>.pic>a",
                            img: "ul>li>.pic>a>img",
                            list: ".gome_sales_content"
                        }, {a: "li>.pic>a", img: "li>.pic>a>img", list: ".product"}, {
                            a: "a",
                            img: "a>img",
                            list: "li[style^=list-style]"
                        }, {a: "li>.pic>a", img: "li>.pic>a>img", list: ".shoplist"}, {
                            a: "li.pic>a",
                            img: "li.pic>a>img",
                            list: ".ranklist"
                        }, {a: "a", img: "a>img", list: "td"}],
                        url: "\\w+\\.dangdang\\.com"
                    }],
                    "list.china-pub.com": [{
                        patterns: [{
                            a: ".xunhuan>.shupi>a:has(img)",
                            img: ".xunhuan>.shupi>a:has(img)>img",
                            list: "#xseo"
                        }], url: "list\\.china-pub\\.com/cache/browse2/"
                    }],
                    "efeihu.com": [{
                        patterns: [{
                            a: "li.pro>.ui_pimg>a,li.ui_pro>.ui_pimg>a,.ui_tab_item>.pro>.ui_pimg>a.img",
                            img: "li.pro>.ui_pimg>a>img,li.ui_pro>.ui_pimg>a>img,.ui_tab_item>.pro>.ui_pimg>a.img>img",
                            list: ".ui_slideSwift_item,.list,.ui_tab_con"
                        }], url: "www\\.efeihu\\.com/(Index\\.aspx|index\\.aspx|[?#]|$)"
                    }, {
                        patterns: [{
                            a: ".pro>a.imgBor,.img_con>a.img",
                            img: ".pro>a.imgBor>img,.img_con>a.img>img", list: ".show,.m_pro_xb"
                        }], url: "www\\.efeihu\\.com/Pages/ProductShow/Search\\.aspx"
                    }, {
                        patterns: [{a: ".m_pro>.img_con>a.img", img: ".m_pro>.img_con>a.img>img", list: ".col_main"}],
                        url: "www\\.efeihu\\.com/Products/\\S+\\.html"
                    }, {
                        patterns: [{
                            a: ".pro>a.imgBor,td>.pro>a.imgBor",
                            img: ".pro>a.imgBor>img,td>.pro>a.imgBor>img",
                            list: ".show,table"
                        }], url: "www\\.efeihu\\.com/Pages/ProductShow/(ProductFirst|ProductSecond)\\.aspx"
                    }, {
                        patterns: [{
                            a: ".vhd_area>.vhd_area_box>li>.img>a",
                            img: ".vhd_area>.vhd_area_box>li>.img>a>img", list: ".vhd_container"
                        }, {a: ".img>a", img: ".img>a>img", list: ".vhd_pro"}], url: "www\\.efeihu\\.com/sale"
                    }, {
                        patterns: [{a: "div>a", img: "div>a>img", list: ".col_img"}, {
                            a: "li>a",
                            img: "li>a>img",
                            list: ".list"
                        }], url: "/Pages/Shopping/ShoppingCart\\.aspx"
                    }],
                    "www.suning.com": [{
                        patterns: [{
                            a: "dd>ul>li a[name^=dac_index]:has(img),.proItem>a",
                            img: "dd>ul>li a[name^=dac_index]:has(img)>img,.proItem>a>img",
                            list: "dl[class^='Center_'],.proItemList"
                        }, {
                            a: "dd>ul>li>a", img: "dd>ul>li>a>img",
                            list: ".Center_6"
                        }, {a: "li>a", img: "li>a>img", list: "ol[class^=w]"}, {
                            a: ".rowImg>a",
                            img: ".rowImg>a>img",
                            list: ".snBrand"
                        }], url: "http://(www\\.)?suning\\.com/([?#]|$)"
                    }, {
                        patterns: [{
                            a: "div.list>a,ul>li>a,dt>a",
                            img: "div.list>a>img,ul>li>a>img,dt>a>img",
                            list: ".proSell,.layCenter,.proListTile,#specPB,.aBuy,.aBuyM"
                        }, {a: "ul>li>a", img: "ul>li>a>img", list: ".eProlBlock"}, {
                            a: "ul>li>a",
                            img: "ul>li>a>img",
                            list: ".proListTile"
                        }, {a: "li>a", img: "li>a>img", list: "ul[class$=Show]"}, {
                            a: "a:has(img)",
                            img: "a:has(img)>img",
                            list: "td"
                        },
                            {a: "li>a", img: "li>a>img", list: ".proBox"}, {
                                a: "ul>li>a",
                                img: "ul>li>a>img",
                                list: ".important,.otherList"
                            }, {a: "li>a", img: "li>a>img", list: ".centerList"}, {
                                a: "li>a",
                                img: "li>a>img",
                                list: ".bookTopList"
                            }, {a: "ul>li>a", img: "ul>li>a>img", list: ".newBookTop"}, {
                                a: "li>.bookCoverBox>a",
                                img: "li>.bookCoverBox>a>img",
                                list: ".thirdList"
                            }, {a: "a", img: "a>img", list: "dd.img"}], url: "/emall/\\S+"
                    }],
                    "list.tmall.com": [{
                        patterns: [{
                            a: ".product>.product-iWrap>.productImg-wrap>a",
                            img: ".product>.product-iWrap>.productImg-wrap>a>img",
                            list: "#J_ItemList"
                        }, {a: ".ald-bd>li>div>a", img: ".ald-bd>li>div>a>img", list: ".ald-inner"}]
                    }],
                    "bookuu.com": [{
                        patterns: [{a: "a", img: "a>img", list: ".b-info"}, {
                            a: ".child>.pic>a",
                            img: ".child>.pic>a>img",
                            list: "#focusBox2"
                        }, {a: "ul>li>.pic>a", img: "ul>li>.pic>a>img", list: ".c-bd"}, {
                            a: ".carousel_li>ul>li>.pic>a",
                            img: ".carousel_li>ul>li>.pic>a>img",
                            list: ".carousel_list"
                        }, {a: ".book>a", img: ".book>a>img", list: ".w-books"}, {
                            a: "li>.show-pic>.item>a",
                            img: "li>.show-pic>.item>a>img",
                            list: "ul[id^=bestsale-panne]"
                        }, {
                            a: ".con>.pic>a",
                            img: ".con>.pic>a>img", list: "div[id^=con]"
                        }], url: "www\\.bookuu\\.com/([?#]|$)"
                    }, {
                        patterns: [{
                            a: ".photo>a,.pic>a",
                            img: ".photo>a>img,.pic>a>img",
                            list: ".main,.hot-list"
                        }, {a: ".pic>a", img: ".pic>a>img", list: ".item"}], url: "search\\.bookuu\\.com"
                    }, {
                        patterns: [{a: ".item>.pic>a", img: ".item>.pic>a>img", list: "#center,#right"}],
                        url: "www\\.bookuu\\.com\\/sort\\/\\d+\\.html"
                    }, {
                        patterns: [{a: ".pic>a", img: ".pic>a>img", list: ".item"}],
                        url: "www\\.bookuu\\.com\\/more\\/"
                    }, {
                        patterns: [{
                            a: ".bd>ul>li>.pic>a,.bd>.item>.pic>a",
                            img: ".bd>ul>li>.pic>a>img,.bd>.item>.pic>a>img", list: ".new-main,.zac,.today-buy"
                        }], url: "www\\.bookuu\\.com\\/newbook\\.html"
                    }, {
                        patterns: [{
                            a: "ul>li>.item>.photo>a",
                            img: "ul>li>.item>.photo>a>img",
                            list: ".zt-box-a-list"
                        }, {
                            a: "li>.item>.photo>a",
                            img: "li>.item>.photo>a>img",
                            list: ".topic-banner"
                        }, {a: "li>.item>.pic>a", img: "li>.item>.pic>a>img", list: ".zt-com-ul"}],
                        url: "special\\.bookuu\\.com"
                    }, {
                        patterns: [{a: "a", img: "a>img", list: ".sp-pic"}, {a: "a", img: "a>img", list: ".pic"}],
                        url: "www\\.bookuu\\.com/activity"
                    },
                        {
                            patterns: [{a: "a", img: "a>img", list: ".pic"}],
                            url: "www\\.bookuu\\.com/shopping/cart\\.php"
                        }],
                    "mall.17mh.com": [{
                        patterns: [{
                            a: "#shop-content-idx>.wrap2>.general-cate>.general-cate-content>table>tbody>tr>td>div>div>a,.wrap3>.skincare-cate>table>tbody>tr>td>table>tbody>tr>td>a,.wrap4>.makeup-cate>table>tbody>tr>td>table>tbody>tr>td>a,.wrap5>.bodycare-cate>table>tbody>tr>td>table>tbody>tr>td>a,.wrap6>.perfume-cate>table>tbody>tr>td>table>tbody>tr>td>a,.wrap8>.man-cate>table>tbody>tr>td>table>tbody>tr>td>a,.wrap7>.discount-cate>.discount-cate-content>.discount-cate-content-view>div>table>tbody>tr>td>.discount-cate-content-item>.discount-cate-content-item-pic>a",
                            img: "#shop-content-idx>.wrap2>.general-cate>.general-cate-content>table>tbody>tr>td>div>div>a>img,.wrap3>.skincare-cate>table>tbody>tr>td>table>tbody>tr>td>a>img,.wrap4>.makeup-cate>table>tbody>tr>td>table>tbody>tr>td>a>img,.wrap5>.bodycare-cate>table>tbody>tr>td>table>tbody>tr>td>a>img,.wrap6>.perfume-cate>table>tbody>tr>td>table>tbody>tr>td>a>img,.wrap8>.man-cate>table>tbody>tr>td>table>tbody>tr>td>a>img,.wrap7>.discount-cate>.discount-cate-content>.discount-cate-content-view>div>table>tbody>tr>td>.discount-cate-content-item>.discount-cate-content-item-pic>a>img",
                            list: "#doc"
                        }]
                    }],
                    "lusen.com": [{
                        patterns: [{a: "a", img: "a>img", list: ".buyimg"}, {
                            a: "a",
                            img: "a>img",
                            list: ".imgbox"
                        }, {a: "a", img: "a>img", list: ".linetit"}, {a: "a", img: "a>img", list: ".molpic"}],
                        url: "www\\.lusen\\.com/(index\\.php|[?#]|$|Product/ProductCategoryList|Product/ProductList)"
                    }, {
                        patterns: [{a: "a", img: "a>img", list: ".orderInfo"}, {a: "a", img: "a>img", list: ".imgbox"}],
                        url: "/Order/Cart\\.aspx"
                    }],
                    "nala.com.cn": [{
                        patterns: [{a: "a", img: "a>img", list: "td"}, {
                            a: "li>dl>dt>a",
                            img: "li>dl>dt>a>img",
                            list: ".rank_list"
                        }, {
                            a: "li>a:has(img)",
                            img: "li>a:has(img)>img", list: ".pf_list"
                        }], url: "www\\.nala\\.com\\.cn/([?#]|$)"
                    }, {
                        patterns: [{
                            a: "#list_new>.product_list>ul>li>a,.productlist>ul>li>a:has(img),#list_new>.product_t>table>tbody>tr>td>a>img",
                            img: "#list_new>.product_list>ul>li>a>img,.productlist>ul>li>a:has(img)>span.productimg>img,#list_new>.product_t>table>tbody>tr>td>a>img",
                            list: ".maincon"
                        }], url: "www\\.nala\\.com\\.cn/(item/newSearchRes/\\d+|list-|item/search)"
                    }],
                    "book.dangdang.com": [{
                        patterns: [{
                            a: "ul>li>.pic>a", img: "ul>li>.pic>a>img",
                            list: "div[id^=djtg_area_],div[id^=zbtj_area_],div[id^=dztj_area_],.book_guess_content"
                        }, {
                            a: "li>.pic>a",
                            img: "li>.pic>a>img",
                            list: "ul[id^=tsjc_area_],ul[id^=tjss_area_]"
                        }, {
                            a: "li>.listitem>.pic>a",
                            img: "li>.listitem>.pic>a>img",
                            list: ".list_v,.list_h"
                        }, {a: ".pd_pic>a", img: ".pd_pic>a>img", list: ".pd_box"}, {
                            a: ".book_pic>a",
                            img: ".book_pic>a>img",
                            list: ".book_detail"
                        }, {a: "ul>li>.pic>a", img: "ul>li>.pic>a>img", list: ".product_list"}, {
                            a: "ul>li>.pic>a",
                            img: "ul>li>.pic>a>img",
                            list: ".product_list"
                        }, {
                            a: "li[class^=line]>a",
                            img: "li[class^=line]>a>img", list: "ul.list_aa"
                        }, {a: "a", img: "a>img", list: "div.pic"}]
                    }],
                    "channel.yintai.com": [{
                        patterns: [{a: "a", img: "a>img", list: ".c-pic"}, {
                            a: "a",
                            img: "a>img",
                            list: ".yd-pic"
                        }]
                    }],
                    "tao3c.com": [{
                        patterns: [{
                            a: "li>.casepic>a,ul>li>div>div>a",
                            img: "li>.casepic>a>img,ul>li>div>div>a>img",
                            list: ".inner_box,.caselist,.productlist"
                        }], url: "tao3c.com/(index\\.jsp|[?#]|$)"
                    }, {patterns: [{a: "a", img: "a>img", list: ".img"}], url: "tao3c\\.com/Cart"}, {
                        patterns: [{
                            a: ".pro_pic>a,.middlediv2_pro>ul>li>p>a,.m_d2>p>a,.spscial_b_pro>.spscial_d1>a",
                            img: ".pro_pic>a>img,.middlediv2_pro>ul>li>p>a>img,.m_d2>p>a>img,.spscial_b_pro>.spscial_d1>a>img",
                            list: ".special_list,.middlediv2_box,.manage_special_box,.spscial_b_list"
                        }], url: "tao3c.com/Sort.do\\?id=\\d+&sortType=\\d+"
                    }, {
                        patterns: [{a: "ul li .pd1 a", img: "ul li .pd1 a img", list: ".productlist,.productlist2"}],
                        url: "tao3c\\.com/(ProductList|ProductListSort)\\.do\\?"
                    }],
                    "order.buy.qq.com": [{
                        patterns: [{
                            a: "li>a",
                            img: "li>a>img",
                            list: "#cart_list"
                        }, {a: "ul.goods_list>li>a", img: "ul.goods_list>li>a>img"}]
                    }],
                    "sale.jd.com": [{
                        patterns: [{
                            a: "a",
                            img: "a>img", list: ".jPic"
                        }, {a: "a", img: "a>img", list: ".p-img"}]
                    }],
                    "search.360buy.com": [{
                        patterns: [{
                            a: ".p-img>a",
                            price: [{selector: ".p-price img", imgToItemLevel: 3}],
                            img: ".p-img>a>img"
                        }, {
                            priect: [{selector: ".mark-price img", imgToItemLevel: 3}],
                            a: ".i-img>a",
                            img: ".i-img>a>img"
                        }]
                    }]
                }, product: {
                    "new7.com": 1,
                    "winxuan.com": 1,
                    "redbaby.com.cn": 1,
                    "huimai100.com": 1,
                    "beifabook.com": 1,
                    "newegg.com.cn": 1,
                    "china-pub.com": 1,
                    "ymatou.com": 1,
                    "bookschina.com": 1,
                    "51buy.com": 1,
                    "no5.com.cn": 1,
                    "rayi.cn": 1,
                    "xiu.com": ["http://item.xiu.com",
                        "http://ebay.xiu.com"],
                    "17mh.com": 1,
                    "coo8.com": 1,
                    "binggo.com": 1,
                    "139shop.com": 1,
                    "homevv.com": 1,
                    "mogujie.com": 1,
                    "lefeng.com": 1,
                    "xiaoye.com": 1,
                    "yihaodian.com": 1,
                    "naruko.com.cn": 1,
                    "suning.com": 1,
                    "2688.com": 1,
                    "vancl.com": 1,
                    "360buy.com": 1,
                    "yintai.com": 1,
                    "justbb.com": 1,
                    "gome.com.cn": 1,
                    "jd.com": 1,
                    "99read.com": 1,
                    "1mall.com": 1,
                    "hmeili.com": 1,
                    "amazon.cn": 1,
                    "ouku.com": 1,
                    "51sheyuan.com": 1,
                    "d1.com.cn": 1,
                    "dangdang.com": 1,
                    "likeface.com": 1,
                    "efeihu.com": 1,
                    "zol.com": ["http://mall.zol.com/detail/"],
                    "vjia.com": 1,
                    "wl.cn": 1,
                    "bookuu.com": 1,
                    "icson.com": 1,
                    "qq.com": ["http://item.buy.qq.com", "http://m.buy.qq.com/t/item"],
                    "jumei.com": 1,
                    "lusen.com": 1,
                    "nala.com.cn": 1,
                    "tao3c.com": 1,
                    "sephora.cn": 1,
                    "taobao.com": ["http://item.taobao.com/auction/item_detail", "http://item.taobao.com/item.htm", "http://wt.taobao.com/detail.htm", "http://a.m.taobao.com"],
                    "tmall.com": ["http://item.tmall.com/item.htm", "http://list.3c.tmall.com/spu-", "http://spu.tmall.com/spu-", "http://detail.tmall.com", "http://a.m.tmall.com"]
                }
            }, pid: "rm001", version: "3.5.0.0",
            application: "ruyijs", price_compare_default_status: !0, search_default_status: !1, templates: {
                "views/price-curve.html": '\ufeff<style type="text/css" id="ruyitao-selector-prefix-price-curve-style" class="ruyitao-selector-prefix-stylesheet ruyitao-selector-prefix-price-curve-protection">\n#ruyitao-selector-prefix-price-curve {\n  position: relative;\n  font: 12px/1.5 \'\u5fae\u8f6f\u96c5\u9ed1\', \'Microsoft YaHei\', Arial, Verdana, Tahoma, sans-serif,\'\u5b8b\u4f53\';\n  width: 370px;\n  height: 26px;\n  border: 1px solid #bed0db;\n  overflow: hidden;\n  cursor: default;\n  border-radius: 3px;\n  -webkit-transition: height .5s ease-in-out;\n  -moz-transition: height .5s ease-in-out;\n  -o-transition: height .5s ease-in-out;\n  -ms-transition: height .5s ease-in-out;\n  transition: height .5s ease-in-out;\n  -webkit-user-select: none;\n  background-color: white;\n}\n\n.ruyitao-selector-prefix-price-curve-expanded {\n  height: 158px !important;\n}\n\n.ruyitao-selector-prefix-price-curve-no-data {\n  height: 60px !important;\n}\n\n#ruyitao-selector-prefix-price-curve-header {\n  height: 24px;\n  background-color: #f2f5f8;\n  vertical-align: middle;\n  text-align: center;\n  cursor: pointer;\n  border: 1px solid #fff;\n}\n\n#ruyitao-selector-prefix-price-curve-title {\n  font-weight: bold;\n  color: #3695d8;\n  float: left;\n  text-shadow: 1px 1px #fff;\n  padding: 3px;\n}\n\n#ruyitao-selector-prefix-price-curve-loading {\n  position: absolute;\n  width: 16px;\n  height: 16px;\n  left: 177px;\n  top: 5px;\n  background: transparent url(%chrome-extension%../images/loading.gif) left center no-repeat;\n}\n\n.ruyitao-selector-prefix-price-curve-btn {\n  cursor: pointer;\n  width: 44px;\n  height: 24px;\n  height: 24px;\n  line-height: 24px;\n  background-repeat: no-repeat;\n  background-position: 0 0;\n  float: right;\n  color: #4ba7e7;\n}\n\n.ruyitao-selector-prefix-price-curve-btn:hover,\n.ruyitao-selector-prefix-price-curve-btn:active {\n  color: #fff;\n  background: transparent url(%chrome-extension%../images/price-curve/hover-bg.png) 0 0 repeat-x;\n}\n\n#ruyitao-selector-prefix-collapse-price-curve {\n  display: none;\n  border-left: 1px solid #fff;\n}\n\n#ruyitao-selector-prefix-share-price-curve {\n  display: none;\n  border-right: 1px solid #dae3ec;\n}\n\n#ruyitao-selector-prefix-price-curve-plot {\n  margin-left: 5px;\n  margin-top: 7px;\n  width: 280px;\n  height: 115px;\n  float: left;\n  clear: both;\n}\n\n#ruyitao-selector-prefix-price-curve-footer {\n  height: 18px;\n  width: 50px;\n  position: absolute;\n  right: 0;\n  bottom: 0;\n  clear: both;\n  display: none;\n}\n.ruyitao-selector-prefix-price-curve-expanded #ruyitao-selector-prefix-price-curve-footer,\n.ruyitao-selector-prefix-price-curve-no-data #ruyitao-selector-prefix-price-curve-footer {\n  display: block;\n}\n#ruyitao-selector-prefix-provider-info {\n  float: right;\n  color: #999;\n  font: 12px/1.5 \'\u5fae\u8f6f\u96c5\u9ed1\', \'Microsoft YaHei\', Arial, Verdana, Tahoma, sans-serif,\'\u5b8b\u4f53\';\n  text-decoration: none;\n  width: 50px;\n  height: 18px;\n  line-height: 18px;\n  display: inline-block;\n  text-align: center;\n  background: transparent url(%chrome-extension%../images/price-curve/indication-bg.png) 0 0 no-repeat;\n  -background: transparent url(%chrome-extension%../images/price-curve/indication-bg-8bit.png) 0 0 no-repeat;\n}\n#ruyitao-selector-prefix-provider-info:hover {\n  text-decoration: none;\n}\n\n#ruyitao-selector-prefix-price-curve-tip {\n  position: absolute;\n  top: 0;\n  left: 0;\n  border: 1px solid #b89a7b;\n  border-radius: 2px;\n  background: #f3ddac;\n  background: -webkit-linear-gradient(top, #f7e8c6, #f3ddac);\n  background: -moz-linear-gradient(top, #f7e8c6, #f3ddac);\n  background: -ms-linear-gradient(top, #f7e8c6, #f3ddac);\n  background: -o-linear-gradient(top, #f7e8c6, #f3ddac);\n  background: linear-gradient(180deg, #f7e8c6, #f3ddac);\n  background: #f3ddac\\9;\n  box-shadow: 1px 1px 2px #aaa;\n  padding: 5px 8px;\n  color: black;\n  text-shadow: 1px 1px white;\n  -webkit-transition: opacity .3s ease-in-out;\n  -moz-transition: opacity .3s ease-in-out;\n  -o-transition: opacity .3s ease-in-out;\n  -ms-transition: opacity .3s ease-in-out;\n  transition: opacity .3s ease-in-out;\n  z-index: 2147483647 !important;\n  opacity: 0;\n  display:none\\9;\n  zoom: 1;\n}\n\n.ruyitao-selector-prefix-tip-visible {\n  opacity: 0.9 !important;\n  display:block !important;\n}\n\n#ruyitao-selector-prefix-price-curve-arrow-down {\n  position: absolute;\n  bottom: -5px;\n  background: transparent url(%chrome-extension%../images/price-curve/arrow-down.png) left top no-repeat;\n  -background: transparent url(%chrome-extension%../images/price-curve/arrow-down-8bit.png) left top no-repeat;\n  width: 8px;\n  height: 5px;\n  overflow: hidden;\n}\n#price_feature_div {\n  height: auto !important;\n}\n\n.ruyitao-selector-prefix-highest-price {\n  color: #e7333e;\n  margin-bottom: 5px;\n  display: block;\n}\n\n.ruyitao-selector-prefix-lowest-price {\n  color: #090;\n  display: block;\n}\n\n.ruyitao-selector-prefix-follow-price {\n  display: inline-block;\n  width: 59px;\n  height: 23px;\n  overflow: hidden;\n  background: transparent url(%chrome-extension%../images/price-curve/follow.png) 0 0 no-repeat;\n  _background: transparent url(%chrome-extension%../images/price-curve/follow-8bit.png) 0 0 no-repeat;\n}\n.ruyitao-selector-prefix-follow-price:hover {\n  background-position: 0 -23px;\n}\n.ruyitao-selector-prefix-follow-price:active {\n  background-position: 0 -46px;\n}\n\n#ruyitao-selector-prefix-pc-price-info {\n  font-size: 12px;\n  margin-top: 7px;\n  text-align: center;\n}\n\n#ruyitao-selector-prefix-no-price-history-info {\n  display: none;\n  color: #999;\n  font-weight: bold;\n  font-size: 14px;\n  text-align: center;\n  padding-top: 7px;\n  clear: both;\n}\n/* \u89e3\u51b3\u56fd\u7f8eoverlay\u6837\u5f0f\u51b2\u7a81  */\n#ruyitao-selector-prefix-price-curve-plot .overlay {\n  background: none;\n  opacity: 0;\n}\n</style>\n<div id="ruyitao-selector-prefix-price-curve" class="ruyitao-selector-prefix-price-curve-protection">\n  <div id="ruyitao-selector-prefix-price-curve-header">\n    <div id="ruyitao-selector-prefix-price-curve-title">\u4ef7\u683c\u8d70\u5411</div>\n    <span id="ruyitao-selector-prefix-price-curve-loading" title="\u52a0\u8f7d\u4e2d..."></span>\n    <div id="ruyitao-selector-prefix-expand-price-curve" class="ruyitao-selector-prefix-price-curve-btn">\u5c55\u5f00</div>\n    <div id="ruyitao-selector-prefix-collapse-price-curve" class="ruyitao-selector-prefix-price-curve-btn">\u6536\u8d77</div>\n    <div id="ruyitao-selector-prefix-share-price-curve" class="ruyitao-selector-prefix-price-curve-btn">\u5206\u4eab</div>\n  </div>\n  <div id="ruyitao-selector-prefix-no-price-history-info">\u5f53\u524d\u5546\u54c1\u6682\u65e0\u5386\u53f2\u4ef7\u683c\u6570\u636e</div>\n  <div id="ruyitao-selector-prefix-price-curve-plot"></div>\n  <div id="ruyitao-selector-prefix-pc-price-info"></div>\n  <div id="ruyitao-selector-prefix-price-curve-footer">\n    <a href="http://ruyi.taobao.com/?utm_medium=ext&utm_source=ruyi" target="_blank" id="ruyitao-selector-prefix-provider-info">\u5982\u610f\u6dd8</a>\n  </div>\n</div>\n',
                "views/srp-compare.html": '<style id="ruyitao-selector-prefix-fast-compare-protection-style" class="ruyitao-selector-prefix-stylesheet ruyitao-selector-prefix-fast-compare-protection">\n#ruyitao-selector-prefix-fast-compare a, #ruyitao-selector-prefix-fast-compare a:visited,\n#ruyitao-selector-prefix-fast-compare a:link {\n  background-color: transparent;\n  cursor: pointer;\n  text-decoration: none;\n}\n#ruyitao-selector-prefix-fast-compare img {\n  display: inline-block;\n  border: none;\n  vertical-align: baseline;\n}\n#ruyitao-selector-prefix-fast-compare {\n  display: none;\n  width: 110px;\n  height: 216px;\n  border-right: 1px dashed #dbdbdb;\n  position: relative;\n  top: 0;\n}\n#ruyitao-selector-prefix-huoyan-wrapper .ruyitao-selector-prefix-fc-arrow {\n  width: 6px;\n  height: 12px;\n  position: absolute;\n  top: 120px;\n  left: -6px;\n  overflow: hidden;\n  background: transparent url(%chrome-extension%../images/fast-compare-arrow-sprites.png) no-repeat 0 0;\n  -background: transparent url(%chrome-extension%../images/fast-compare-arrow-sprites-8bit.png) no-repeat 0 0;\n}\n#ruyitao-selector-prefix-huoyan-wrapper .ruyitao-selector-prefix-fc-arrow-right {\n  background-position: 0 -13px;\n}\n#ruyitao-selector-prefix-huoyan-wrapper .ruyitao-selector-prefix-fc-share-wrapper{\n  width: 92px;\n  position: absolute;\n  right: 5px;\n  top: 38px;\n}\n#ruyitao-selector-prefix-fc-share {\n  cursor: pointer;\n  width: 84px;\n  height: 16px;\n  display: block;\n  background: url(%chrome-extension%../images/share_to_microblog_btn.gif) no-repeat 0 0;\n  margin: 0 4px;\n  overflow: hidden;\n}\n\n#ruyitao-selector-prefix-fc-list {\n  margin: 0 1px;\n  padding:0;\n  height: 163px;\n}\n#ruyitao-selector-prefix-fc-list .ruyitao-selector-prefix-fc-item {\n  list-style: none;\n  /*border-bottom: 1px solid #ddd;*/\n  margin: 0;\n}\n\n.ruyitao-selector-prefix-price-highlight {\n  font-weight: bold;\n}\n#ruyitao-selector-prefix-fc-list .ruyitao-selector-prefix-fc-item-link {\n  padding: 8px 10px;\n  line-height: 14px;\n  height: 14px;\n  text-decoration: none;\n  color: black;\n  display: block;\n  white-space: nowrap;\n}\n#ruyitao-selector-prefix-fc-list .ruyitao-selector-prefix-fc-item:hover {\n  background: #f6f6f6;\n}\n\n#ruyitao-selector-prefix-fc-list .ruyitao-selector-prefix-fc-item:hover a.ruyitao-selector-prefix-fc-item-link {\n  color: #e20000;\n}\n#ruyitao-selector-prefix-fc-list .ruyitao-selector-prefix-fc-item-img {\n  margin-right: 10px;\n  vertical-align: middle;\n}\n#ruyitao-selector-prefix-fc-list .ruyitao-selector-prefix-fc-item-price {\n  font-size: 12px;\n  vertical-align: middle;\n}\n#ruyitao-selector-prefix-fast-compare .ruyitao-selector-prefix-fc-footer {\n  text-align: center;\n  margin-top: 4px;\n}\n#ruyitao-selector-prefix-huoyan-wrapper .ruyitao-selector-prefix-hy-header {\n  color: #0082cb;\n  font-size: 16px;\n  text-align: left;\n  height: 20px;\n  overflow: hidden;\n  margin-bottom: 12px;\n  padding-left: 10px;\n}\n#ruyitao-selector-prefix-fast-compare .ruyitao-selector-prefix-fc-spec {\n  display: block;\n  color: #777;\n  border-top: 1px solid #fff;\n  border-bottom: 1px solid #ddd;\n  padding: 4px;\n}\n#ruyitao-selector-prefix-fc-logo {\n  display: inline-block;\n  width: 19px;\n  height: 19px;\n  background: url(%chrome-extension%../icons/logo-19.png) no-repeat 0 0;\n  vertical-align: middle;\n  margin-right: 5px;\n}\n#ruyitao-selector-prefix-fc-title {\n  display: inline-block;\n  vertical-align: middle;\n  height: 19px;\n  line-height: 19px;\n}\n#ruyitao-selector-prefix-fc-product-link,\n#ruyitao-selector-prefix-fc-error-link {\n  line-height: 12px;\n  color: #0082cb;\n  margin: 0 5px 15px 5px;\n}\n#ruyitao-selector-prefix-fc-product-link:visited,\n#ruyitao-selector-prefix-fc-error-link:visited {\n  color: #0082cb;\n}\n\n#ruyitao-selector-prefix-huoyan-wrapper {\n  font-family: "\u5fae\u8f6f\u96c5\u9ed1", "Microsoft YaHei", "\u5b8b\u4f53", Verdana, Geneva, sans-serif;\n  background: #fefefe;\n  padding-bottom: 12px;\n  border: 1px solid #d7d7d7;\n  position: absolute;\n  z-index: 2147483647 !important;\n  height: 255px;\n  cursor: default;\n  border-radius: 3px;\n  display: none;\n}\n\n.ruyitao-selector-prefix-hx-sub-wrapper {\n  float: left;\n}\n\n#ruyitao-selector-prefix-huoyan-header {\n  margin-bottom: 10px;\n  background: #4696f0;\n  height: 28px;\n  zoom: 1;\n  display: block;\n}\n\n.ruyitao-selector-prefix-hy-logo {\n  height: 16px;\n  width: 60px;\n  float: left;\n  color: #999;\n  font: 12px/1.5 \'\u5fae\u8f6f\u96c5\u9ed1\', \'Microsoft YaHei\', Arial, Verdana, Tahoma, sans-serif,\'\u5b8b\u4f53\';\n  text-decoration: none;\n  line-height: 18px;\n  display: inline-block;\n  text-align: center;\n  margin: 5px 0 3px 6px;\n}\n\n#ruyitao-selector-prefix-hy-price-curve {\n  width: 314px;\n}\n\n#ruyitao-selector-prefix-hy-price-curve-plot {\n  width: 280px;\n  height: 145px;\n  margin: 23px 0 2px 12px;\n}\n\n#ruyitao-selector-prefix-hy-price-curve-plot .overlay {\n  background: none !important;\n}\n\n#ruyitao-selector-prefix-pc-price-info {\n  font-size: 14px;\n  text-align: center;\n}\n\n#ruyitao-selector-prefix-no-price-comparation-info {\n  font-size: 12px;\n  font-size: black;\n  margin-top: 32px;\n  text-align: center;\n  padding: 0 10px;\n  padding-top: 80px;\n  height: 114px;\n  background: white;\n  position: absolute;\n  top: 0;\n}\n\n#ruyitao-selector-prefix-hy-pc-price-info {\n  font-size: 12px;\n  margin-left: 50px;\n  position: relative;\n  text-align: left;\n}\n\n.ruyitao-selector-prefix-hy-highest-price {\n  color: #e20000;\n  margin-right: 20px;\n}\n\n.ruyitao-selector-prefix-hy-lowest-price {\n  color: #090;\n}\n\n.ruyitao-selector-prefix-hy-follow-price {\n  display: block;\n  width: 72px;\n  height: 27px;\n  overflow: hidden;\n  background: transparent url(%chrome-extension%../images/srp-compare/follow.png) 0 0 no-repeat;\n  _background: transparent url(%chrome-extension%../images/srp-compare/follow-8bit.png) 0 0 no-repeat;\n  position: absolute;\n  top: 4px;\n  right: 22px;\n}\n.ruyitao-selector-prefix-hy-follow-price:hover {\n  background-position: 0 -27px;\n}\n.ruyitao-selector-prefix-hy-follow-price:active {\n  background-position: 0 -54px;\n}\n\n#ruyitao-selector-prefix-hy-price-curve-tip {\n  position: absolute;\n  top: 0;\n  left: 0;\n  border: 1px solid #b89a7b;\n  border-radius: 2px;\n  background: #f3ddac;\n  background: -webkit-linear-gradient(top, #f7e8c6, #f3ddac);\n  background: -moz-linear-gradient(top, #f7e8c6, #f3ddac);\n  background: -ms-linear-gradient(top, #f7e8c6, #f3ddac);\n  background: -o-linear-gradient(top, #f7e8c6, #f3ddac);\n  background: #f3ddac 9;\n  box-shadow: 1px 1px 2px #aaa;\n  padding: 5px 8px;\n  color: black;\n  text-shadow: 1px 1px white;\n  -webkit-transition: opacity .3s ease-in-out;\n  -moz-transition: opacity .3s ease-in-out;\n  -o-transition: opacity .3s ease-in-out;\n  -ms-transition: opacity .3s ease-in-out;\n  transition: opacity .3s ease-in-out;\n  z-index: 2147483647 !important;\n  opacity: 0;\n  display: none 9;\n  zoom: 1;\n  font-size: 12px;\n  font-family: "\u5fae\u8f6f\u96c5\u9ed1", "Microsoft YaHei", "\u5b8b\u4f53", Verdana, Geneva, sans-serif;\n  line-height: 18px;\n}\n\n.ruyitao-selector-prefix-hy-tip-visible {\n  opacity: 0.9 !important;\n  display: block !important;\n}\n\n#ruyitao-selector-prefix-hy-price-curve-arrow-down {\n  position: absolute;\n  bottom: -5px;\n  background: transparent url(%chrome-extension%../images/price-curve/arrow-down.png) left top no-repeat;\n  -background: transparent url(%chrome-extension%../images/price-curve/arrow-down-8bit.png) left top no-repeat;\n  width: 8px;\n  height: 5px;\n  overflow: hidden;\n}\n\n/*Fix style bug of www.139shop.com*/\ndiv, input, select, ul {\n  float: none;\n}\n\n#ruyitao-selector-prefix-huoyan-icon {\n  display: none;\n  position: absolute;\n  width: 89px;\n  height: 25px;\n  border-radius: 2px;\n  background: transparent url(%chrome-extension%../images/srp-compare/huoyan-bar.png) left top no-repeat;\n  box-shadow: 0px 1px 2px #d0d0d0;\n  cursor: pointer;\n  z-index: 2147483647 !important;\n}\n\n#ruyitao-selector-prefix-huoyan-icon:hover {\n  background-position: 0 -25px;\n}\n</style>\n<div id="ruyitao-selector-prefix-huoyan-wrapper">\n  <div id="ruyitao-selector-prefix-huoyan-header">\n    <a class="ruyitao-selector-prefix-hy-logo" href="http://ruyi.taobao.com/?utm_medium=ext&utm_source=ruyi" target="_blank">\n      <\!--[if lte IE 6]>\n      <img title="\u5982\u610f\u6dd8\u63d0\u4f9b" src="%chrome-extension%../images/logo-52x16-8bit.png"/>\n      <![endif]--\>\n      <![if gt IE 6]>\n      <img src="%chrome-extension%../images/logo-52x16.png"/>\n      <![endif]>\n    </a>\n  </div>\n  <div id="ruyitao-selector-prefix-huoyan-body">\n    <div id="ruyitao-selector-prefix-fast-compare" class="ruyitao-selector-prefix-hx-sub-wrapper">\n      <div class="ruyitao-selector-prefix-hy-header">\u6bd4\u4ef7</div>\n      <ul id="ruyitao-selector-prefix-fc-list"></ul>\n      <div class="ruyitao-selector-prefix-fc-footer">\n        <a id="ruyitao-selector-prefix-fc-product-link" href="javascript:void(0);">\u66f4\u591a</a>\n        <a id="ruyitao-selector-prefix-fc-error-link" title="\u7ea0\u9519\u6709\u5956" href="javascript:void(0);">\u7ea0\u9519</a>\n      </div>\n      <div id="ruyitao-selector-prefix-no-price-comparation-info">\u6682\u65e0</div>\n    </div>\n    <div id="ruyitao-selector-prefix-hy-price-curve" class="ruyitao-selector-prefix-hx-sub-wrapper">\n      <div class="ruyitao-selector-prefix-hy-header">\u4ef7\u683c\u8d70\u5411</div>\n      <div id="ruyitao-selector-prefix-hy-price-curve-plot"></div>\n      <div id="ruyitao-selector-prefix-hy-pc-price-info"></div>\n    </div>\n  </div>\n  <\!-- <div class="ruyitao-selector-prefix-fc-share-wrapper"><a id="ruyitao-selector-prefix-fc-share" href="javascript:void(0);"></a></div> --\>\n  <div class="ruyitao-selector-prefix-fc-arrow"></div>\n</div>\n<div id="ruyitao-selector-prefix-huoyan-icon"></div>\n',
                "views/searchbox.html": '<style type="text/css" class="ruyitao-selector-prefix-searchbox-protection">\n.ruyitao-selector-prefix-reset, .ruyitao-selector-prefix-wrapper input, .ruyitao-selector-prefix-wrapper td {\n  padding: 0;\n  margin: 0;\n}\n\n.ruyitao-selector-prefix-wrapper ul, .ruyitao-selector-prefix-wrapper li {\n  padding: 0;\n  margin: 0;\n  list-style: none;\n  background: none;\n  vertical-align: middle;\n}\n\n.ruyitao-selector-prefix-wrapper table {\n  display: table;\n  table-layout: auto;\n  border-collapse: separate;\n  border-spacing: 2px;\n  border: none;\n}\n\n.ruyitao-selector-prefix-wrapper tbody {\n  display: table-row-group;\n  vertical-align: middle;\n}\n\n.ruyitao-selector-prefix-wrapper a {\n  padding: 0;\n  background-color: transparent;\n  text-decoration: none;\n  cursor: pointer;\n  border: none;\n  background-image: none;\n}\n\n.ruyitao-selector-prefix-wrapper a:hover {\n  text-decoration: none;\n}\n\n.ruyitao-selector-prefix-wrapper img, .ruyitao-selector-prefix-wrapper img:hover {\n  display: inline;\n  margin: 0;\n  border: none;\n  vertical-align: baseline;\n}\n\n.ruyitao-selector-prefix-wrapper form {\n  padding: 0;\n  margin: 0;\n  position: static;\n}\n\n.ruyitao-selector-prefix-wrapper button {\n  padding: 1px 10px;\n  margin: 0;\n  border: 1px solid #aaa;\n  border-radius: 2px;\n  background-color: #ddd;\n  background: transparent;\n  background: -webkit-linear-gradient(top, #f2f2f2, #ebebeb 50%, #ddd 50%, #cfcfcf);\n  background: -moz-linear-gradient(top, #f2f2f2, #ebebeb 50%, #ddd 50%, #cfcfcf);\n  background: -o-linear-gradient(top, #f2f2f2, #ebebeb 50%, #ddd 50%, #cfcfcf);\n  background: -ms-linear-gradient(top, #f2f2f2, #ebebeb 50%, #ddd 50%, #cfcfcf);\n  background: linear-gradient(180deg, #f2f2f2, #ebebeb 50%, #ddd 50%, #cfcfcf);\n  cursor: pointer;\n  color: black;\n  font-weight: normal;\n  font-family: "\u5fae\u8f6f\u96c5\u9ed1", "Microsoft YaHei", "\u5b8b\u4f53", Verdana, Geneva, sans-serif;\n  font-size: 12px;\n  background-color: #f0f0f0;\n}\n\n.ruyitao-selector-prefix-wrapper button:hover {\n  color: black;\n  border: 1px solid #aaa;\n  background-color: #d9f0fc;\n  background: transparent;\n  background: -webkit-linear-gradient(top, #eaf6fd, #d9f0fc 50%, #bee6fa 50%, #a7d9f5);\n  background: -moz-linear-gradient(top, #eaf6fd, #d9f0fc 50%, #bee6fa 50%, #a7d9f5);\n  background: -o-linear-gradient(top, #eaf6fd, #d9f0fc 50%, #bee6fa 50%, #a7d9f5);\n  background: -ms-linear-gradient(top, #eaf6fd, #d9f0fc 50%, #bee6fa 50%, #a7d9f5);\n  background: linear-gradient(180deg, #eaf6fd, #d9f0fc 50%, #bee6fa 50%, #a7d9f5);\n}\n\n.ruyitao-selector-prefix-wrapper button:active {\n  color: black;\n  border: 1px solid #aaa;\n  background: transparent;\n  background: -webkit-linear-gradient(top, #cfcfcf, #f2f2f2);\n  background: -moz-linear-gradient(top, #cfcfcf, #f2f2f2);\n  background: -o-linear-gradient(top, #cfcfcf, #f2f2f2);\n  background: -ms-linear-gradient(top, #cfcfcf, #f2f2f2);\n  background: linear-gradient(180deg, #cfcfcf, #f2f2f2);\n}\n\n.ruyitao-selector-prefix-ib {\n  display: inline-block;\n  *display: inline;\n  zoom: 1;\n}\n\n.ruyitao-selector-prefix-wrapper {\n  width: auto;\n  margin: 0;\n  padding: 0;\n  position: fixed;\n  -position: absolute;\n  left: 0;\n  color: black;\n  font-size: 12px;\n  font-family: "\u5fae\u8f6f\u96c5\u9ed1", "Microsoft YaHei", "\u5b8b\u4f53", Verdana, Geneva, sans-serif;\n  text-align: left;\n  -webkit-user-select: none;\n  z-index: 2147483646 !important;\n  border: 1px solid #e0e0e0;\n}\n\n/* controller bar styles start*/\n\n#ruyitao-selector-prefix-controller-bar {\n  opacity: 1;\n  border-radius: 2px;\n  zoom: 1;\n  bottom: 79px;\n  z-index: 2147483647 !important;\n}\n#ruyitao-selector-prefix-controller-bar .ruyitao-selector-prefix-controller-bar-box {\n  height: 25px;\n  float: left;\n  background: #f8f8f8;\n}\n\n#ruyitao-selector-prefix-control-icons {\n  display: inline-block;\n  vertical-align: top;\n  height: 25px;\n  background-color: #fff;\n  border: 1px solid #d1d1d1;\n  border-radius: 3px;\n  border-left: none;\n  border-top-left-radius: 0;\n  border-bottom-left-radius: 0;\n  overflow: hidden;\n  padding: 0;\n}\n#ruyitao-selector-prefix-control-icons .ruyitao-selector-prefix-control-icons-box {\n  display: inline-block;\n  height: 25px;\n  background: url(%chrome-extension%../images/search/controller-bg.png) repeat-x 0 center;\n}\n\n#ruyitao-selector-prefix-search-engines {\n  overflow: hidden;\n  height: 25px;\n  padding-left: 5px;\n}\n\n#ruyitao-selector-prefix-search-engines .ruyitao-selector-prefix-se {\n  float: left;\n  text-align: center;\n  width: 25px;\n  height: 20px;\n  padding-top: 5px;\n  cursor: pointer;\n}\n\n.ruyitao-selector-prefix-se-active {\n  cursor: default;\n  background: url(%chrome-extension%../images/search/func-icon-press.png) no-repeat 0 0;\n}\n\n.ruyitao-selector-prefix-separator-small,\n.ruyitao-selector-prefix-separator-small.ruyitao-selector-prefix-separator-se {\n  width: 2px;\n  margin: 0 4px;\n  height: 100%;\n  vertical-align: top;\n  background: url(%chrome-extension%../images/search/separator-small.png) no-repeat center center;\n}\n.ruyitao-selector-prefix-separator-se {\n  float: left;\n}\n\n#ruyitao-selector-prefix-functional-btns {\n  height: 100%;\n  overflow: hidden;\n  /*white-space: nowrap;*/\n}\n\n#ruyitao-selector-prefix-functional-btns .ruyitao-selector-prefix-func-btn {\n  float: left;\n  width: 25px;\n  height: 25px;\n  text-align: center;\n  cursor: pointer;\n}\n\n#ruyitao-selector-prefix-functional-btns img {\n  vertical-align: middle;\n}\n\n#ruyitao-selector-prefix-collection-btn {\n  display: none;\n}\n\n.ruyitao-selector-prefix-func-btn:hover {\n  background: url(%chrome-extension%../images/search/func-icon-hover.png) 0 0 no-repeat;\n}\n.ruyitao-selector-prefix-func-btn.ruyitao-selector-prefix-active-control-icon {\n  background: url(%chrome-extension%../images/search/func-icon-press.png) 0 0 no-repeat;\n}\n\n#ruyitao-selector-prefix-search-icon {}\n\n#ruyitao-selector-prefix-plus-btn {\n  border-right:1px solid #d1d1d1;\n}\n\n/* controller bar styles end*/\n\n/* product list bar styles start*/\n\n#ruyitao-selector-prefix-products-wrapper {\n  display: none;\n  min-width: 300px;\n  height: 78px;\n  bottom: 0;\n  white-space: nowrap;\n  background-color: #fff;\n  padding: 0 1px;\n}\n#ruyitao-selector-prefix-products-wrapper .ruyitao-selector-prefix-products-box {\n  background-color: #f9f9f9;\n  background: -webkit-linear-gradient(top, #f9f9f9, #fdfdfd);\n  background: -moz-linear-gradient(top, #f9f9f9, #fdfdfd);\n  background: -o-linear-gradient(top, #f9f9f9, #fdfdfd);\n  background: -ms-linear-gradient(top, #f9f9f9, #fdfdfd);\n  background: linear-gradient(180deg, #f9f9f9, #fdfdfd);\n  height: 78px;\n  _float: left;\n}\n\n#ruyitao-selector-prefix-product-list-wrapper {\n  float: left;\n  height: 78px;\n  position: relative;\n  top: 0;\n  left: 0;\n  overflow: hidden;\n  min-width: 203px;\n  -width: 203px;\n  -webkit-transition: width .15s ease-in-out;\n  -moz-transition: width .15s ease-in-out;\n  -o-transition: width .15s ease-in-out;\n  -ms-transition: width .15s ease-in-out;\n  transition: width .15s ease-in-out;\n}\n\n#ruyitao-selector-prefix-product-list {\n  position: absolute;\n  left: 0;\n  -webkit-transition: left .15s ease-in-out;\n  -moz-transition: left .15s ease-in-out;\n  -o-transition: left .15s ease-in-out;\n  -ms-transition: left .15s ease-in-out;\n  transition: left .15s ease-in-out;\n}\n\n.ruyitao-selector-prefix-arrow {\n  float: left;\n  width: 30px;\n  height: 78px;\n  cursor: default;\n  -webkit-transition: all .15s ease-in-out;\n}\n\n.ruyitao-selector-prefix-active-arrow:hover, .ruyitao-selector-prefix-active-arrow-hl {\n  background-color: #ddd!important;\n}\n\n#ruyitao-selector-prefix-prev-page-btn {\n  background: url(%chrome-extension%../images/search/prev-page-btn-default.png) center center no-repeat;\n}\n\n#ruyitao-selector-prefix-prev-page-btn.ruyitao-selector-prefix-active-arrow {\n  cursor: pointer;\n  background: url(%chrome-extension%../images/search/prev-page-btn-active.png) center center no-repeat;\n  -background: url(%chrome-extension%../images/search/prev-page-btn-active-8bit.png) center center no-repeat;\n}\n\n#ruyitao-selector-prefix-next-page-btn {\n  background: url(%chrome-extension%../images/search/next-page-btn-default.png) center center no-repeat;\n}\n\n#ruyitao-selector-prefix-next-page-btn.ruyitao-selector-prefix-active-arrow {\n  cursor: pointer;\n  background: url(%chrome-extension%../images/search/next-page-btn-active.png) center center no-repeat;\n  -background: url(%chrome-extension%../images/search/next-page-btn-active-8bit.png) center center no-repeat;\n}\n\n#ruyitao-selector-prefix-product-list {\n  overflow: hidden;\n  height: 100%;\n}\n\n#ruyitao-selector-prefix-product-list .ruyitao-selector-prefix-product-item {\n  float: left;\n  width: 90px;\n  height: 73px;\n  padding-top: 7px;\n  text-align: center;\n  cursor: pointer;\n  -webkit-transition: all .15s ease-in-out;\n}\n\n#ruyitao-selector-prefix-product-list .ruyitao-selector-prefix-product-item:hover {\n  background: #f1f1f1 !important;\n  background: -webkit-linear-gradient(top, #f1f1f1, #ededed) !important;\n  background: -moz-linear-gradient(top, #f1f1f1, #ededed) !important;\n  background: -o-linear-gradient(top, #f1f1f1, #ededed) !important;\n  background: -ms-linear-gradient(top, #f1f1f1, #ededed) !important;\n  background: linear-gradient(180deg, #f1f1f1, #ededed) !important;\n  *background: #f1f1f1;\n}\n\n#ruyitao-selector-prefix-product-list .ruyitao-selector-prefix-product-item.ruyitao-selector-prefix-product-item-hl {\n  background: #f1f1f1 !important;\n}\n\n.ruyitao-selector-prefix-product-item-separator {\n  float: left;\n  height: 100%;\n  width: 0;\n  border-left: 1px solid #b7b7b7;\n  border-right: 1px solid white;\n}\n\n.ruyitao-selector-prefix-product-image {\n  max-height: 50px;\n  max-width: 50px;\n  vertical-align: middle !important;\n}\n\n.ruyitao-selector-prefix-product-image-wrapper {\n  display: inline-block;\n  width: 50px;\n  height: 50px;\n  text-align: center;\n  background: white;\n  box-shadow: 0 0 5px #aaa;\n  outline: 1px solid #aaa\\9;\n  overflow: hidden;\n  vertical-align: middle;\n}\n\n.ruyitao-selector-prefix-line-height-setter {\n  display: inline-block;\n  border: 0;\n  width: 0;\n  padding: 0;\n  margin: 0;\n  height: 100%;\n  vertical-align: middle;\n}\n\n.ruyitao-selector-prefix-product-price {\n  width: 92%;\n  padding-top: 3px;\n  margin: 0 auto;\n  color: #ce0d12;\n  overflow: hidden;\n  white-space: nowrap;\n  text-align: center;\n}\n\n.ruyitao-selector-prefix-product-price img, .ruyitao-selector-prefix-product-price img:hover {\n  margin-top: 2px;\n}\n\n.ruyitao-selector-prefix-product-price-wrapper {\n  display: inline-block;\n  width: 100%;\n  overflow: hidden;\n  text-overflow: ellipsis;\n  white-space: nowrap;\n  text-align: center;\n  font-family: "\u5fae\u8f6f\u96c5\u9ed1", "Microsoft YaHei", "\u5b8b\u4f53", Verdana, Geneva, sans-serif;\n}\n\n#ruyitao-selector-prefix-product-list-overlay {\n  display: none;\n  position: absolute;\n  top: 0;\n  left: 0;\n  width: 100%;\n  height: 100%;\n  background-color: white;\n  opacity: 0.9;\n  filter: alpha(opacity=90);\n  text-align: center;\n}\n\n#ruyitao-selector-prefix-loading {\n  width: 50px;\n  height: 50px;\n  margin: 0 auto;\n  margin-top: 15px;\n  background: transparent url(%chrome-extension%../images/search/loading.gif) center center no-repeat;\n  border-radius: 7px;\n}\n\n#ruyitao-selector-prefix-message {\n  display: none;\n  font-size: 15px;\n  padding: 28px 20px 0 20px;\n  text-shadow: 0 1px #ccc;\n  text-align: center;\n  background: rgba(255, 255, 255, 0.5);\n  background-color: white\\9;\n  height: 100%;\n}\n/* product list bar styles end*/\n\n.ruyitao-selector-prefix-popup {\n  position: absolute;\n  bottom: 30px;\n  z-index: 2147483646 !important;\n  border: 1px solid #bfbfbf;\n  border-radius: 3px;\n  zoom: 1;\n}\n\n/* down arrow style start*/\n.ruyitao-selector-prefix-arrow-down {\n  display: none;\n  position: absolute;\n  width: 16px;\n  height: 7px;\n  bottom: -7px;\n  background: url(%chrome-extension%../images/search/arrow-down.png) 0 0 no-repeat;\n  z-index: 2147483647 !important;\n}\n\n.ruyitao-selector-prefix-arrow-down2 {\n  background: url(%chrome-extension%../images/search/arrow-down2.png) 0 0 no-repeat;\n}\n/* down arrow style end*/\n\n/* search bar styles start*/\n\n#ruyitao-selector-prefix-search-bar {\n  float: left;\n  height: 21px;\n  line-height: 21px;\n  vertical-align: middle;\n  overflow: hidden;\n  padding: 2px;\n  padding-right: 8px;\n  *padding-top: 0; /*Fix for IE6, IE7*/\n  border-left: 1px solid #e0e0e0;\n  background: #fefefe;\n  background: -webkit-linear-gradient(top, #fefefe, #fafafa);\n  background: -moz-linear-gradient(top, #fefefe, #fafafa);\n  background: -o-linear-gradient(top, #fefefe, #fafafa);\n  background: -ms-linear-gradient(top, #fefefe, #fafafa);\n  background: linear-gradient(180deg, #fefefe, #fafafa);\n}\n\n#ruyitao-selector-prefix-search {\n  width: 87px;\n  height: 19px;\n  line-height: 19px;\n  margin: 0;\n  padding-left: 3px;\n  border: 1px solid #e0e0e0;\n  outline: none;\n  vertical-align: middle;\n  color: black !important;\n  font-size: 12px;\n  font-family: "\u5fae\u8f6f\u96c5\u9ed1", "Microsoft YaHei", "\u5b8b\u4f53", Verdana, Geneva, sans-serif;\n  font-weight: normal;\n  box-shadow: none;\n  -webkit-transition: width .2s ease-out;\n  -moz-transition: width .2s ease-out;\n  -o-transition: width .2s ease-out;\n  -ms-transition: width .2s ease-out;\n  transition: width .2s ease-out;\n}\n\n#ruyitao-selector-prefix-search:focus {\n  border: 1px solid #9cc5ea;\n}\n\n#ruyitao-selector-prefix-search-btn {\n  width: 19px;\n  height: 19px;\n  border: none;\n  margin-left: 5px;\n  cursor: pointer;\n  vertical-align: middle;\n  filter: \'\';\n  background: url(%chrome-extension%../images/search/search-icon-blue.png) center center no-repeat;\n  -background: url(%chrome-extension%../images/search/search-icon-blue-8bit.png) center center no-repeat;\n}\n\n#ruyitao-selector-prefix-search-bar .ruyitao-selector-prefix-arrow-down {\n  right: 20px;\n}\n\n#ruyitao-selector-prefix-search-bar.ruyitao-selector-prefix-search-focus #ruyitao-selector-prefix-search-bar {\n  border-color: #b8dbf0;\n}\n#ruyitao-selector-prefix-search-bar.ruyitao-selector-prefix-search-focus #ruyitao-selector-prefix-search {\n  width: 135px;\n}\n/*#ruyitao-selector-prefix-search-bar.ruyitao-selector-prefix-search-focus #ruyitao-selector-prefix-search-btn {\n  background-image: url(%chrome-extension%../images/search/search-active.png);\n  -background-image: url(%chrome-extension%../images/search/search-active-8bit.png);\n}*/\n/* search bar styles end*/\n\n/* search engines settings styles start*/\n#ruyitao-selector-prefix-search-engines-setting {\n  display: none;\n  padding: 5px 8px;\n  background: #fbfbfb;\n  min-width: 100px;\n  -width: 100px; /*Fix min-width for IE6*/\n}\n\n#ruyitao-selector-prefix-ses-text {\n  display: block;\n  float: none;\n  padding: 0;\n  margin: 0;\n  font-size: 14px;\n  font-weight: bold;\n}\n\n#ruyitao-selector-prefix-ses-table {\n  padding-bottom: 5px;\n  margin: 0;\n}\n\n#ruyitao-selector-prefix-ses-table .ruyitao-selector-prefix-ses-row {\n  margin: 8px 0;\n}\n\n#ruyitao-selector-prefix-ses-table .ruyitao-selector-prefix-ses-cell {\n  padding: 5px 8px 0 0;\n  white-space: nowrap;\n  font-family: "\u5fae\u8f6f\u96c5\u9ed1", "Microsoft YaHei", "\u5b8b\u4f53", Verdana, Geneva, sans-serif;\n  font-size: 12px;\n  border: none;\n}\n\n#ruyitao-selector-prefix-ses-table .ruyitao-selector-prefix-ses {\n  float: none;\n  border: none;\n  margin-right: 8px;\n  height: auto;\n  width: auto;\n  line-height: normal;\n}\n\n.ruyitao-selector-prefix-ses, .ruyitao-selector-prefix-ses-label {\n  display: inline;\n  vertical-align: middle;\n  cursor: default;\n  float: none;\n  margin: 0;\n  padding: 0;\n}\n\n#ruyitao-selector-prefix-search-engines-setting .ruyitao-selector-prefix-arrow-down {\n  right: 20px;\n}\n\n#ruyitao-selector-prefix-submit-ses-btn {\n  height: 24px;\n  min-width: 48px;\n  max-width: 120px;\n}\n\n#ruyitao-selector-prefix-ses-msg {\n  display: none;\n  padding-bottom: 5px;\n  color: red;\n}\n/* search engines settings styles end*/\n\n/* option list styles start*/\n#ruyitao-selector-prefix-option-list-content {\n  -width: 80px; /* Set fixed width for IE6 */\n  display: none;\n  left: 0;\n  padding: 4px;\n  background: #fbfbfb;\n  zoom: 1;\n}\n\n#ruyitao-selector-prefix-option-list {\n  zoom: 1;\n}\n\n#ruyitao-selector-prefix-option-list .ruyitao-selector-prefix-option-item {\n  min-width: 70px; /*Fix shrink to fit width bug for IE7*/\n  width: auto !important;\n  width: 70px;\n  height: 19px;\n  border-radius: 2px;\n  padding: 3px 6px;\n  cursor: pointer;\n  zoom: 1;\n  white-space: nowrap;\n}\n\n.ruyitao-selector-prefix-option-item:hover, .ruyitao-selector-prefix-option-item-hl {\n  background: url(%chrome-extension%../images/search/option-item-hover.png) repeat-x 0 0 !important;\n}\n\n.ruyitao-selector-prefix-option-item:hover .ruyitao-selector-prefix-option-text,\n.ruyitao-selector-prefix-option-item-hl .ruyitao-selector-prefix-option-text {\n  color: white;\n}\n\n.ruyitao-selector-prefix-option-link {\n  display: inline-block;\n  height: 19px;\n  line-height: 19px\\9;\n  width: 100%;\n}\n\n#ruyitao-selector-prefix-option-list .ruyitao-selector-prefix-option-image {\n  width: 18px;\n  height: 16px;\n  display: inline-block;\n  background-repeat: no-repeat;\n  margin-right: 5px;\n  vertical-align: middle;\n  background-image: url(%chrome-extension%../images/search/option-icons.png);\n}\n\n.ruyitao-selector-prefix-option-text {\n  color: #5f5f5f;\n  font-size: 12px;\n  font-family: "\u5fae\u8f6f\u96c5\u9ed1", "Microsoft YaHei", "\u5b8b\u4f53", Verdana, Geneva, sans-serif;\n  vertical-align: middle;\n}\n\n#ruyitao-selector-prefix-option-link .ruyitao-selector-prefix-option-image {\nbackground-position: 0 -119px;\n}\n\n#ruyitao-selector-prefix-feedback-link .ruyitao-selector-prefix-option-image {\nbackground-position: 0 -17px;\n}\n\n#ruyitao-selector-prefix-help-link .ruyitao-selector-prefix-option-image {\nbackground-position: 0 -51px;\n}\n\n#ruyitao-selector-prefix-official-website-link .ruyitao-selector-prefix-option-image {\nbackground-position: 0 -85px;\n}\n\n#ruyitao-selector-prefix-official-microblog-link .ruyitao-selector-prefix-option-image {\nbackground-position: 0 -153px;\n}\n\n#ruyitao-selector-prefix-renren-link .ruyitao-selector-prefix-option-image {\nbackground-position: 0 -136px;\n}\n\n#ruyitao-selector-prefix-option-link:hover .ruyitao-selector-prefix-option-image, .ruyitao-selector-prefix-option-link-hl {\nbackground-position: 0 -102px;\n}\n\n#ruyitao-selector-prefix-feedback-link:hover .ruyitao-selector-prefix-option-image, .ruyitao-selector-prefix-feedback-link-hl {\nbackground-position: 0 0;\n}\n\n#ruyitao-selector-prefix-help-link:hover .ruyitao-selector-prefix-option-image, .ruyitao-selector-prefix-help-link-hl {\nbackground-position: 0 -34px;\n}\n\n#ruyitao-selector-prefix-official-website-link:hover .ruyitao-selector-prefix-option-image, .ruyitao-selector-prefix-official-website-link-hl {\nbackground-position: 0 -68px;\n}\n\n/* option list settings styles end*/\n\n#ruyitao-selector-prefix-product-detail-container {\n  display: none;\n  position: absolute;\n  width: 242px;\n  bottom: 110px;\n  border: 1px solid #ccc;\n  background: #fbfbfb;\n  border-radius: 5px;\n  padding: 8px;\n  color: #4e4e4e;\n  font-size: 13px;\n  overflow: hidden;\n  white-space: normal;\n  z-index: 2147483646 !important\n}\n\n#ruyitao-selector-prefix-product-detail-container a, #ruyitao-selector-prefix-product-detail-container a:link, #ruyitao-selector-prefix-product-page-link {\n  color: #0092d2;\n  text-decoration: none;\n  font-family: "\u5fae\u8f6f\u96c5\u9ed1", "Microsoft YaHei", "\u5b8b\u4f53", Verdana, Geneva, sans-serif;\n}\n\n#ruyitao-selector-prefix-product-page-link {\n  line-height: 1.2em;\n}\n\n#ruyitao-selector-prefix-product-detail-container a:hover, #ruyitao-selector-prefix-product-page-link:hover {\n  color: #036db1 !important;\n  text-decoration: underline !important;\n}\n\n#ruyitao-selector-prefix-product-detail-container div {\n  margin-top: 3px;\n}\n\n#ruyitao-selector-prefix-product-title {\n  min-height: 1.2em;\n  max-height: 2.4em;\n  line-height: 1.2em;\n  font-weight: bold;\n  overflow: hidden;\n  margin-top: 0 !important;\n  cursor: pointer;\n  font-size: 13px;\n}\n\n#ruyitao-selector-prefix-product-price {\n  font-size: 13px;\n}\n\n#ruyitao-selector-prefix-product-image {\n  width: 240px;\n  height: 240px;\n  border: 1px solid #ccc;\n  margin: 5px 0;\n  text-align: center;\n  overflow: hidden;\n  white-space: nowrap;\n  background: white;\n}\n\n#ruyitao-selector-prefix-product-image img {\n  max-width: 240px;\n  max-height: 240px;\n  vertical-align: middle;\n  cursor: pointer;\n  overflow: hidden;\n}\n\n#ruyitao-selector-prefix-product-image span {\n  height: 100%;\n  vertical-align: middle;\n}\n\n#ruyitao-selector-prefix-product-rating span {\n  height: 100%;\n  vertical-align: middle;\n}\n#ruyitao-selector-prefix-product-other-info div {\n  height: 24px;\n  line-height: 24px;\n}\n\n#ruyitao-selector-prefix-product-used-price {\n  text-decoration: line-through;\n}\n\n#ruyitao-selector-prefix-product-now-price {\n  color: red;\n}\n\n#ruyitao-selector-prefix-product-rating-stars {\n  font-size: 12px;\n}\n#ruyitao-selector-prefix-product-fast-trick {\n  width: 242px;\n  white-space: nowrap;\n  overflow: hidden;\n  text-overflow: ellipsis;\n  font-size: 12px;\n}\n\n#ruyitao-selector-prefix-product-detail-container.ruyitao-selector-prefix-product-detail-container-for-etao {\n  width: 350px;\n}\n\n#ruyitao-selector-prefix-product-detail-container #ruyitao-selector-prefix-product-detail-container-for-etao,\n#ruyitao-selector-prefix-product-detail-container-for-etao div {\n  margin-top: 0;\n}\n\n#ruyitao-selector-prefix-product-image-for-etao {\n  float: left;\n  width: 100px;\n  height: 100px;\n  border: 1px solid #ccc;\n  text-align: center;\n  margin: 0 12px 10px 0;\n  overflow: hidden;\n}\n\n#ruyitao-selector-prefix-product-image-for-etao img {\n  max-width: 100px;\n  max-height: 100px;\n  vertical-align: middle;\n}\n\n#ruyitao-selector-prefix-product-image-for-etao span {\n  height: 100%;\n  vertical-align: middle;\n}\n\n#ruyitao-selector-prefix-product-base-info-for-etao {\n  overflow: hidden;\n}\n\n#ruyitao-selector-prefix-product-base-info-for-etao div {\n  font-size: 14px;\n  margin-bottom: 5px;\n}\n\n.ruyitao-selector-prefix-clear {\n  clear: both;\n}\n\n#ruyitao-selector-prefix-merchants span {\n  margin-right: 10px;\n}\n\n#ruyitao-selector-prefix-merchants-price a {\n  display: inline-block;\n  border-radius: 3px;\n  zoom: 1;\n  width: 340px;\n  height: 22px;\n  line-height: 22px\\9;\n  padding: 2px 5px;\n}\n\n#ruyitao-selector-prefix-merchants-price a:hover {\n  background-color: #ddd;\n  text-decoration: none !important;\n}\n\n.ruyitao-selector-prefix-merchant-name {\n  width: 200px;\n  margin-right: 10px;\n  overflow: hidden;\n  white-space: nowrap;\n  text-overflow: ellipsis;\n}\n\n#ruyitao-selector-prefix-merchants-price span {\n  height: 22px;\n  display: inline-block;\n  zoom: 1;\n  vertical-align: middle;\n}\n\n.ruyitao-selector-prefix-merchant-price {\n  text-align: right;\n  width: 120px;\n  overflow: hidden;\n  white-space: nowrap;\n  text-overflow: ellipsis;\n}\n\n.ruyitao-selector-prefix-popup-loading {\n  background: url(%chrome-extension%../images/search/loading.gif) no-repeat center;\n  margin: 0 auto;\n  width: 100px;\n  height: 130px;\n}\n\n.ruyitao-selector-prefix-se:hover {\n  background: url(%chrome-extension%../images/search/func-icon-hover.png) 0 0 no-repeat;\n}\nli.ruyitao-selector-prefix-se.ruyitao-selector-prefix-active-control-icon {\n  background: url(%chrome-extension%../images/search/func-icon-press.png) 0 0 no-repeat;\n}\n\n.ruyitao-selector-prefix-separator {\n  border-left: 1px solid #bfbfbf;\n  border-right: 1px solid white;\n  height: 100%;\n  vertical-align: top;\n}\n\n#ruyitao-selector-prefix-close-btn {\n  position: absolute;\n  right: -9px;\n  top: -9px;\n  width: 18px;\n  height: 18px;\n  background: url(%chrome-extension%../images/close-icon-18x18.png) no-repeat 0 0;\n  -background: url(%chrome-extension%../images/close-icon-18x18-8bit.png) no-repeat 0 0;\n  cursor: pointer;\n}\n\n#ruyitao-selector-prefix-search-logo {\n  float: left;\n  position: relative;\n  top: -1px;\n  left: -1px;\n  width: 35px;\n  height: 78px;\n  border: 1px solid #58b6f7;\n  background: url(%chrome-extension%../images/search/search-logo.png) no-repeat center right;\n  cursor: pointer;\n}\n\n#ruyitao-selector-prefix-merchants-selection-handler {\n  float: left;\n  height: 25px;\n  min-width: 68px;\n  -width: 68px;\n  padding: 0 7px;\n  line-height: 25px;\n  cursor: pointer;\n  background: #f8f8f8;\n  background: -webkit-linear-gradient(top, #f8f8f8, #efefef);\n  background: -moz-linear-gradient(top, #f8f8f8, #efefef);\n  background: -o-linear-gradient(top, #f8f8f8, #efefef);\n  background: -ms-linear-gradient(top, #f8f8f8, #efefef);\n  background: linear-gradient(180deg, #f8f8f8, #efefef);\n  font-weight: bold;\n  white-space: nowrap;\n}\n\n#ruyitao-selector-prefix-current-merchant-name {\n  display: inline-block;\n  min-width: 53px;\n  -width: 53px;\n  padding-right: 17px;\n  background: url(%chrome-extension%../images/search/arrow-up-blue.png) no-repeat center right;\n  -background: url(%chrome-extension%../images/search/arrow-up-blue-8bit.png) no-repeat center right;\n  vertical-align: middle;\n}\n\n#ruyitao-selector-prefix-merchants-selection-wrapper {\n  display: none;\n  position: absolute;\n  left: 0;\n  bottom: 25px;\n  min-width: 83px;\n  -width: 83px;\n  border: 1px solid #e0e0e0;\n  color: #222222;\n  font-size: 12px;\n  background: #fcfcfc;\n}\n\n#ruyitao-selector-prefix-merchant-list {\n  width: 100%;\n  cursor: pointer;\n}\n\n#ruyitao-selector-prefix-merchant-list .ruyitao-selector-prefix-merchant-item {\n  height: 25px;\n  min-width: 53px;\n  -width: 53px;\n  line-height: 25px;\n  padding-left: 7px;\n  padding-right: 23px;\n  border-bottom: 1px solid #f3f3f3;\n}\n\n#ruyitao-selector-prefix-merchant-list .ruyitao-selector-prefix-merchant-item:hover,\n.ruyitao-selector-prefix-merchant-item-hl {\n  background-color: #eeeeee !important;\n}\n\n.ruyitao-selector-prefix-merchant-item.ruyitao-selector-prefix-merchant-selected {\n  background-image: url(%chrome-extension%../images/search/merchant-selected-icon.png);\n  background-repeat: no-repeat !important;\n  background-position: 95% center !important;\n  *background-image: url(%chrome-extension%../images/search/merchant-selected-icon-8bit.png) !important;\n}\n\n#ruyitao-selector-prefix-shrink-bar {\n  display: none;\n  width: 100px;\n  height: 28px;\n  background: white;\n  bottom: 0;\n  left: 0;\n  border-radius: 2px;\n  border: 1px solid #dcdcdc;\n  cursor: pointer;\n}\n\n#ruyitao-selector-prefix-shrink-bar span {\n  display: inline-block;\n}\n\n#ruyitao-selector-prefix-shrink-logo {\n  width: 70px;\n  height: 30px;\n  position: relative;\n  top: -1px;\n  left: -1px;\n  background: url(%chrome-extension%../images/shrink-logo.png) no-repeat 0 0;\n}\n\n#ruyitao-selector-prefix-expansion-arrow {\n  width: 30px;\n  height: 30px;\n  background: #fafafa url(%chrome-extension%../images/expansion-arrow.png) no-repeat center center;\n  -background: #fafafa url(%chrome-extension%../images/expansion-arrow-8bit.png) no-repeat center center;\n}\n\n#ruyitao-selector-prefix-expansion-arrow:hover {\n  background-color: #f5f5f5;\n}\n\n#ruyitao-selector-prefix-expansion-arrow:active {\n  background-color: #efefef;\n}\n\n#ruyitao-selector-prefix-non-zh-logo {\n  display: none;\n  float: left;\n  border: 1px solid #499ce5;\n  border-bottom: none;\n  height: 25px;\n  width: 74px;\n  position: relative;\n  top: -1px;\n  left: -1px;\n  margin-right: -1px;\n  margin-bottom: -1px;\n  background: url(%chrome-extension%../images/search/non-zh-search-logo.png) no-repeat 0 0;\n  cursor: pointer;\n}\n\n.ruyitao-selector-prefix-shrink-bar-en #ruyitao-selector-prefix-shrink-logo {\n  background: url(%chrome-extension%../images/shrink-logo-en.png) no-repeat 0 0;\n}\n</style>\n<link rel="stylesheet" type="text/css" class="ruyitao-selector-prefix-searchbox-protection" href="%chrome-extension%../css/searchbox-patch.css" />\n<div id="ruyitao-selector-prefix-controller-bar" class="ruyitao-selector-prefix-wrapper ruyitao-selector-prefix-searchbox-protection">\n  <div class="ruyitao-selector-prefix-controller-bar-box">\n    <div id="ruyitao-selector-prefix-non-zh-logo"></div>\n    <div id="ruyitao-selector-prefix-merchants-selection-handler">\n      <span id="ruyitao-selector-prefix-current-merchant-name">\u6240\u6709\u5546\u57ce</span>\n    </div>\n    <div id="ruyitao-selector-prefix-search-bar">\n      <form id="ruyitao-selector-prefix-search-form" action="#">\n        <input id="ruyitao-selector-prefix-search" type="text" x-webkit-speech x-webkit-grammar="builtin:translate" accesskey="s" autocomplete="off" maxlength="50" /><button id="ruyitao-selector-prefix-search-btn" type="submit" data-i18n="attribute->title:search" title="\u641c\u7d22"></button><b class="ruyitao-selector-prefix-line-height-setter"></b>\n      </form>\n    </div>\n    <div id="ruyitao-selector-prefix-merchants-selection-wrapper"><ul id="ruyitao-selector-prefix-merchant-list"></ul></div>\n  </div>\n</div>\n<div id="ruyitao-selector-prefix-products-wrapper" class="ruyitao-selector-prefix-wrapper ruyitao-selector-prefix-searchbox-protection">\n  <div class="ruyitao-selector-prefix-products-box">\n    <div id="ruyitao-selector-prefix-search-logo" title="\u5982\u610f\u6dd8 - \u641c\u7d22"></div>\n    <div id="ruyitao-selector-prefix-prev-page-btn" class="ruyitao-selector-prefix-arrow"></div>\n    <div id="ruyitao-selector-prefix-product-list-wrapper">\n      <ul id="ruyitao-selector-prefix-product-list"></ul>\n      <div id="ruyitao-selector-prefix-product-list-overlay">\n        <div id="ruyitao-selector-prefix-loading"></div>\n      </div>\n      <div id="ruyitao-selector-prefix-message" data-i18n="content->no_products"></div>\n    </div>\n    <div id="ruyitao-selector-prefix-next-page-btn" class="ruyitao-selector-prefix-arrow"></div>\n    <div id="ruyitao-selector-prefix-product-detail-container"></div>\n    <div id="ruyitao-selector-prefix-close-btn" data-i18n="attribute->title:close"></div>\n  </div>\n</div>\n<div id="ruyitao-selector-prefix-shrink-bar" class="ruyitao-selector-prefix-wrapper" title="\u70b9\u51fb\u5c55\u5f00\u5982\u610f\u6dd8\u641c\u7d22">\n  <span id="ruyitao-selector-prefix-shrink-logo"></span><span id="ruyitao-selector-prefix-expansion-arrow"></span>\n</div>\n',
                "views/products.html": '<style type="text/css" id="ruyitao-selector-prefix-products-style" class="ruyitao-selector-prefix-stylesheet ruyitao-selector-prefix-products-protection">\n.ruyitao-selector-prefix-reset, .ruyitao-selector-prefix-wrapper input, .ruyitao-selector-prefix-wrapper td {\n  padding: 0;\n  margin: 0;\n}\n\n.ruyitao-selector-prefix-wrapper ul, .ruyitao-selector-prefix-wrapper li {\n  padding: 0;\n  margin: 0;\n  list-style: none;\n}\n\n.ruyitao-selector-prefix-wrapper table {\n  display: table;\n  table-layout: auto;\n  border-collapse: separate;\n  border-spacing: 2px;\n  border: none;\n}\n\n.ruyitao-selector-prefix-wrapper tbody {\n  display: table-row-group;\n  vertical-align: middle;\n}\n\n.ruyitao-selector-prefix-wrapper a, .ruyitao-selector-prefix-wrapper a:visited, .ruyitao-selector-prefix-wrapper a:link {\n  background-color: transparent;\n  text-decoration: none;\n  cursor: pointer;\n}\n\n.ruyitao-selector-prefix-wrapper img, .ruyitao-selector-prefix-wrapper fieldset {\n  display: inline-block;\n  border: none;\n  vertical-align: baseline;\n}\n\n.ruyitao-selector-prefix-wrapper button {\n  padding: 2px 10px;\n  margin: 0;\n  border: 1px solid #e3e3e3;\n  border-radius: 2px;\n  background-color: #e3e3e3;\n  background: -webkit-linear-gradient(top, white, #e3e3e3);\n  background: -o-linear-gradient(top, white, #e3e3e3);\n  background: -ms-linear-gradient(top, white, #e3e3e3);\n  background: -moz-linear-gradient(top, white, #e3e3e3);\n  background: linear-gradient(180deg, white, #e3e3e3);\n  cursor: pointer;\n  font-family: "\u5fae\u8f6f\u96c5\u9ed1", "Microsoft YaHei", "\u5b8b\u4f53", Verdana, Geneva, sans-serif;\n  font-size: 12px;\n}\n\n.ruyitao-selector-prefix-wrapper button:hover {\n  background-color: white;\n  background: -webkit-linear-gradient(bottom, white, #e3e3e3);\n  background: -o-linear-gradient(bottom, white, #e3e3e3);\n  background: -moz-linear-gradient(bottom, white, #e3e3e3);\n  background: -ms-linear-gradient(bottom, white, #e3e3e3);\n  background: linear-gradient(0deg, white, #e3e3e3);\n}\n\n.ruyitao-selector-prefix-ib {\n  display: inline-block;\n  *display: inline;\n  zoom: 1;\n}\n\n.ruyitao-selector-prefix-wrapper {\n  position: fixed;\n  -position: absolute;\n  left: 0;\n  font-size: 12px;\n  font-family: "\u5fae\u8f6f\u96c5\u9ed1", "Microsoft YaHei", "\u5b8b\u4f53", Verdana, Geneva, sans-serif;\n  text-align: left;\n  -webkit-user-select: none;\n  z-index: 2147483646 !important;\n  vertical-align: baseline;\n}\n\n.ruyitao-selector-prefix-popup {\n  position: absolute;\n  bottom: 30px;\n  z-index: 2147483646 !important;\n  border: 1px solid #bfbfbf;\n  border-radius: 3px;\n  filter: alpha(opacity=100);\n  opacity: 1;\n}\n\n.ruyitao-selector-prefix-clear {\n  clear: both;\n}\n\n.ruyitao-selector-prefix-price-comparation-logo {\n  float: left;\n  width: 95px;\n  height: 48px;\n  position: relative;\n  top: -1px;\n  left: -1px;\n  border: 1px solid #58b6f7;\n  border-top-left-radius: 3px;\n  background: url(%chrome-extension%../images/products/price-comparation-logo.png) no-repeat center;\n}\n\n#ruyitao-selector-prefix-merchants span {\n  margin-right: 10px;\n}\n\n#ruyitao-selector-prefix-merchants-price a {\n  display: inline-block;\n  border-radius: 3px;\n  zoom: 1;\n  width: 340px;\n  height: 22px;\n  line-height: 22px\\9;\n  padding: 2px 5px;\n}\n\n#ruyitao-selector-prefix-merchants-price a:hover {\n  background-color: #ddd;\n  text-decoration: none;\n}\n\n.ruyitao-selector-prefix-merchant-name {\n  width: 200px;\n  margin: 0 10px 3px 0;\n  overflow: hidden;\n  white-space: nowrap;\n  text-overflow: ellipsis;\n}\n\n#ruyitao-selector-prefix-merchants-price span {\n  height: 22px;\n  display: inline-block;\n  zoom: 1;\n  vertical-align: middle;\n}\n\n.ruyitao-selector-prefix-merchant-price {\n  text-align: right;\n  width: 120px;\n  overflow: hidden;\n  white-space: nowrap;\n  text-overflow: ellipsis;\n}\n\n.ruyitao-selector-prefix-popup-loading {\n  background: url(%chrome-extension%../images/search/loading.gif) no-repeat center;\n  margin: 0 auto;\n  width: 100px;\n  height: 130px;\n}\n\n#ruyitao-selector-prefix-price-comparation-wrapper {\n  display: none;\n  height: 48px;\n  bottom: 0;\n  border: 1px solid #e9e9e9;\n  border-radius: 3px;\n  white-space: nowrap;\n  background-color: #fff;\n}\n#ruyitao-selector-prefix-price-comparation-wrapper .ruyitao-selector-prefix-price-comparation-box {\n  background-color: #fdfdfd;\n  background: -webkit-linear-gradient(top, #fdfdfd, #fcfcfc);\n  background: -o-linear-gradient(top, #fdfdfd, #fcfcfc);\n  background: -ms-linear-gradient(top, #fdfdfd, #fcfcfc);\n  background: -moz-linear-gradient(top, #fdfdfd, #fcfcfc);\n  background: linear-gradient(180deg, #fdfdfd, #fcfcfc);\n  height: 100%;\n  -overflow: hidden; /*Fix for IE6*/\n  _float: left;\n}\n\n#ruyitao-selector-prefix-market-list {\n  float: left;\n  overflow: hidden;\n  height: 48px;\n}\n\n#ruyitao-selector-prefix-market-list .ruyitao-selector-prefix-market-item {\n  float: left;\n  /*width: 76px;*/\n  height: 100%;\n  cursor: pointer;\n  width: 100px;\n  padding: 0 10px;\n}\n\n#ruyitao-selector-prefix-market-list .ruyitao-selector-prefix-market-item:hover, .ruyitao-selector-prefix-market-item-hl {\n  background: #f4f4f4;\n  background: -webkit-linear-gradient(top, #f4f4f4, #ebebeb);\n  background: -o-linear-gradient(top, #f4f4f4, #ebebeb);\n  background: -ms-linear-gradient(top, #f4f4f4, #ebebeb);\n  background: -moz-linear-gradient(top, #f4f4f4, #ebebeb);\n  background: linear-gradient(180deg, #f4f4f4, #ebebeb);\n  *background: #f4f4f4;\n}\n\n.ruyitao-selector-prefix-market-name {\n  text-align: center;\n  vertical-align: bottom;\n  color: #222222;\n  height: 18px;\n  line-height: 18px;\n  margin: 0 auto;\n  overflow: hidden;\n  white-space: nowrap;\n  font-size: 12px;\n  font-family: "\u5fae\u8f6f\u96c5\u9ed1", "Microsoft YaHei", "\u5b8b\u4f53", Verdana, Geneva, sans-serif;\n}\n.ruyitao-selector-prefix-price {\n  height: 22px;\n  line-height: 22px;\n  color: #e40000;\n  overflow: hidden;\n  text-overflow: ellipsis;\n  white-space: nowrap;\n  text-align: center;\n  font-family: "\u5fae\u8f6f\u96c5\u9ed1", "Microsoft YaHei", "\u5b8b\u4f53", Verdana, Geneva, sans-serif;\n  font-size: 15px;\n  margin-top: 6px;\n}\n.ruyitao-selector-prefix-market-icon {\n  width: 46px;\n  height: 100%;\n  float: left;\n}\n.ruyitao-selector-prefix-market-important {\n  background: transparent url(%chrome-extension%../images/products/suggest.png) no-repeat center center;\n  -background: transparent url(%chrome-extension%../images/products/suggest-8bit.png) no-repeat center center;\n}\n.ruyitao-selector-prefix-market-unimportant {\n  background: transparent url(%chrome-extension%../images/products/others.png) no-repeat center center;\n  -background: transparent url(%chrome-extension%../images/products/others-8bit.png) no-repeat center center;\n}\n\n#ruyitao-selector-prefix-func-btns-wrapper {\n  height: 48px;\n  float: left;\n  overflow: hidden;\n  background: #f8f8f8;\n  background: -webkit-linear-gradient(top, #f8f8f8, #f2f2f2);\n  background: -o-linear-gradient(top, #f8f8f8, #f2f2f2);\n  background: -ms-linear-gradient(top, #f8f8f8, #f2f2f2);\n  background: -moz-linear-gradient(top, #f8f8f8, #f2f2f2);\n  background: linear-gradient(180deg, #f8f8f8, #f2f2f2);\n}\n\n#ruyitao-selector-prefix-func-btns-wrapper span {\n  display: inline-block;\n  width: 100%;\n  height: 100%;\n}\n\n#ruyitao-selector-prefix-func-btns-wrapper div {\n  float: left;\n  width: 40px;\n  height: 100%;\n  text-align: center;\n  cursor: pointer;\n  line-height: normal;\n}\n#ruyitao-selector-prefix-func-btns-wrapper div:hover, .ruyitao-selector-prefix-func-btn-hl {\n  background: url(%chrome-extension%../images/products/func-btn-hover.png) no-repeat center center;\n  -background: url(%chrome-extension%../images/products/func-btn-hover-8bit.png) no-repeat center center;\n}\n\n#ruyitao-selector-prefix-more-results-link {\n  float: left;\n  width: 100px;\n  height: 100%;\n  cursor: pointer;\n}\n\n#ruyitao-selector-prefix-more-results-link span {\n  width: 100%;\n  height: 100%;\n  display: inline-block;\n  background: url(%chrome-extension%../images/products/more.png) no-repeat center center;\n  -background: url(%chrome-extension%../images/products/more-8bit.png) no-repeat center center;\n}\n\n#ruyitao-selector-prefix-more-results-link:hover, .ruyitao-selector-prefix-more-results-link-hl {\n  background: #f4f4f4;\n  background: -webkit-linear-gradient(top, #f4f4f4, #ebebeb);\n  background: -o-linear-gradient(top, #f4f4f4, #ebebeb);\n  background: -ms-linear-gradient(top, #f4f4f4, #ebebeb);\n  background: -moz-linear-gradient(top, #f4f4f4, #ebebeb);\n  background: linear-gradient(180deg, #f4f4f4, #ebebeb);\n  *background: #f4f4f4;\n}\n\n#ruyitao-selector-prefix-search-in-taobao-icon span {\n  background: url(%chrome-extension%../images/products/taobao.png) no-repeat center center;\n  -background: url(%chrome-extension%../images/products/taobao-8bit.png) no-repeat center center;\n}\n\n#ruyitao-selector-prefix-author-icon span {\n  background: url(%chrome-extension%../images/products/author.png) no-repeat center center;\n  -background: url(%chrome-extension%../images/products/author-8bit.png) no-repeat center center;\n}\n\n#ruyitao-selector-prefix-search-icon span {\n  background: url(%chrome-extension%../images/products/search-cn-blue.png) no-repeat center center;\n  -background: url(%chrome-extension%../images/products/search-cn-blue-8bit.png) no-repeat center center;\n}\n\n#ruyitao-selector-prefix-error-link span {\n  background: url(%chrome-extension%../images/products/error.png) no-repeat center center;\n  -background: url(%chrome-extension%../images/products/error-8bit.png) no-repeat center center;\n}\n\n.ruyitao-selector-prefix-separator {\n  border-left: 1px solid #bfbfbf;\n  border-right: 1px solid white;\n  height: 100%;\n  vertical-align: top;\n}\n\n.ruyitao-selector-prefix-close-btn {\n  position: absolute;\n  right: -9px;\n  top: -9px;\n  width: 18px;\n  height: 18px;\n  background: url(%chrome-extension%../images/close-icon-18x18.png) no-repeat 0 0;\n  -background: url(%chrome-extension%../images/close-icon-18x18-8bit.png) no-repeat 0 0;\n  cursor: pointer;\n}\n\n.ruyitao-selector-prefix-market-name-hightlight {\n  font-weight: bold;\n}\n\n#ruyitao-selector-prefix-product-detail-container {\n  display: none;\n  position: absolute;\n  width: 242px;\n  bottom: 85px;\n  border: 1px solid #ccc;\n  background: -webkit-linear-gradient(top, #fbfbfb, #f9f9f9);\n  background: -moz-linear-gradient(top, #fbfbfb, #f9f9f9);\n  background: -o-linear-gradient(top, #fbfbfb, #f9f9f9);\n  background: -ms-linear-gradient(top, #fbfbfb, #f9f9f9);\n  background: linear-gradient(180deg, #fbfbfb, #f9f9f9);\n  background: white\\9;\n  border-radius: 5px;\n  padding: 8px;\n  color: #4e4e4e;\n  font-size: 13px;\n  overflow: hidden;\n  white-space: normal;\n  z-index: 2147483646 !important\n}\n\n#ruyitao-selector-prefix-product-detail-container a, #ruyitao-selector-prefix-product-detail-container a:link, #ruyitao-selector-prefix-product-page-link {\n  color: #0092d2;\n  text-decoration: none;\n  font-family: "\u5fae\u8f6f\u96c5\u9ed1", "Microsoft YaHei", "\u5b8b\u4f53", Verdana, Geneva, sans-serif;\n}\n\n#ruyitao-selector-prefix-product-page-link {\n  line-height: 1.2em;\n}\n\n#ruyitao-selector-prefix-product-detail-container a:hover, #ruyitao-selector-prefix-product-page-link:hover {\n  color: #036db1;\n  text-decoration: underline;\n}\n\n#ruyitao-selector-prefix-product-detail-container div {\n  margin-top: 3px;\n}\n\n#ruyitao-selector-prefix-product-title {\n  min-height: 1.2em;\n  max-height: 2.4em;\n  line-height: 1.2em;\n  font-weight: bold;\n  overflow: hidden;\n  margin-top: 0 !important;\n  cursor: pointer;\n}\n\n#ruyitao-selector-prefix-product-image {\n  width: 240px;\n  height: 240px;\n  border: 1px solid #ccc;\n  margin: 5px 0;\n  text-align: center;\n  overflow: hidden;\n  background: white;\n  white-space: nowrap;\n}\n\n#ruyitao-selector-prefix-product-image img {\n  max-width: 240px;\n  max-height: 240px;\n  vertical-align: middle;\n  cursor: pointer;\n  overflow: hidden;\n}\n\n#ruyitao-selector-prefix-product-image span {\n  height: 100%;\n  vertical-align: middle;\n}\n\n#ruyitao-selector-prefix-product-rating span {\n  height: 100%;\n  vertical-align: middle;\n}\n#ruyitao-selector-prefix-product-other-info div {\n  height: 24px;\n  line-height: 24px;\n}\n\n#ruyitao-selector-prefix-product-used-price {\n  text-decoration: line-through;\n}\n\n#ruyitao-selector-prefix-product-now-price {\n  color: red;\n}\n\n#ruyitao-selector-prefix-product-rating-stars {\n  font-size: 12px;\n}\n#ruyitao-selector-prefix-product-fast-trick {\n  width: 242px;\n  white-space: nowrap;\n  overflow: hidden;\n  text-overflow: ellipsis;\n  font-size: 12px;\n}\n\n#ruyitao-selector-prefix-product-detail-container.ruyitao-selector-prefix-product-detail-container-for-etao {\n  width: 350px;\n}\n\n#ruyitao-selector-prefix-product-detail-container #ruyitao-selector-prefix-product-detail-container-for-etao,\n#ruyitao-selector-prefix-product-detail-container-for-etao div {\n  margin-top: 0;\n}\n\n#ruyitao-selector-prefix-product-image-for-etao {\n  float: left;\n  width: 100px;\n  height: 100px;\n  border: 1px solid #ccc;\n  text-align: center;\n  margin: 0 12px 10px 0;\n  background: white;\n  overflow: hidden;\n}\n\n#ruyitao-selector-prefix-product-image-for-etao img {\n  max-width: 100px;\n  max-height: 100px;\n  vertical-align: middle;\n}\n\n#ruyitao-selector-prefix-product-image-for-etao span {\n  height: 100%;\n  vertical-align: middle;\n}\n\n#ruyitao-selector-prefix-product-base-info-for-etao {\n  overflow: hidden;\n}\n\n#ruyitao-selector-prefix-product-base-info-for-etao div {\n  font-size: 14px;\n  margin-bottom: 5px;\n}\n\n/* product list bar styles start*/\n\n#ruyitao-selector-prefix-products-wrapper {\n  display: none;\n  height: 78px;\n  min-width: 300px;\n  bottom: 0;\n  border: 1px solid #d1d1d1;\n  border-radius: 3px;\n  white-space: nowrap;\n  background-color: #fff;\n  padding: 0 1px;\n}\n#ruyitao-selector-prefix-products-wrapper .ruyitao-selector-prefix-products-box {\n  background-color: #f9f9f9;\n  background: -webkit-linear-gradient(top, #f9f9f9, #fdfdfd);\n  background: -moz-linear-gradient(top, #f9f9f9, #fdfdfd);\n  background: -o-linear-gradient(top, #f9f9f9, #fdfdfd);\n  background: -ms-linear-gradient(top, #f9f9f9, #fdfdfd);\n  background: linear-gradient(180deg, #f9f9f9, #fdfdfd);\n  height: 78px;\n  _float: left;\n}\n\n#ruyitao-selector-prefix-product-list-wrapper {\n  float: left;\n  height: 80px;\n  position: relative;\n  top: 0;\n  left: 0;\n  overflow: hidden;\n  min-width: 203px;\n  -width: 203px;\n  -webkit-transition: width .15s ease-in-out;\n  -moz-transition: width .15s ease-in-out;\n  -o-transition: width .15s ease-in-out;\n  -ms-transition: width .15s ease-in-out;\n  transition: width .15s ease-in-out;\n}\n\n#ruyitao-selector-prefix-product-list {\n  position: absolute;\n  left: 0;\n  -webkit-transition: left .15s ease-in-out;\n  -moz-transition: left .15s ease-in-out;\n  -o-transition: left .15s ease-in-out;\n  -ms-transition: left .15s ease-in-out;\n  transition: left .15s ease-in-out;\n}\n\n.ruyitao-selector-prefix-arrow {\n  float: left;\n  width: 30px;\n  height: 80px;\n  cursor: default;\n  -webkit-transition: all .15s ease-in-out;\n}\n\n.ruyitao-selector-prefix-active-arrow:hover, .ruyitao-selector-prefix-active-arrow-hl {\n  background-color: #ddd!important;\n}\n\n#ruyitao-selector-prefix-prev-page-btn {\n  background: url(%chrome-extension%../images/search/prev-page-btn-default.png) center center no-repeat;\n}\n\n#ruyitao-selector-prefix-prev-page-btn.ruyitao-selector-prefix-active-arrow {\n  cursor: pointer;\n  background: url(%chrome-extension%../images/search/prev-page-btn-active.png) center center no-repeat;\n}\n\n#ruyitao-selector-prefix-next-page-btn {\n  background: url(%chrome-extension%../images/search/next-page-btn-default.png) center center no-repeat;\n}\n\n#ruyitao-selector-prefix-next-page-btn.ruyitao-selector-prefix-active-arrow {\n  cursor: pointer;\n  background: url(%chrome-extension%../images/search/next-page-btn-active.png) center center no-repeat;\n}\n\n#ruyitao-selector-prefix-product-list {\n  overflow: hidden;\n  height: 100%;\n}\n\n#ruyitao-selector-prefix-product-list .ruyitao-selector-prefix-product-item {\n  float: left;\n  width: 90px;\n  height: 72px;\n  padding-top: 8px;\n  text-align: center;\n  cursor: pointer;\n  -webkit-transition: all .15s ease-in-out;\n}\n\n#ruyitao-selector-prefix-product-list .ruyitao-selector-prefix-product-item:hover, .ruyitao-selector-prefix-product-item-hl {\n  background: #f1f1f1 !important;\n  background: -webkit-linear-gradient(top, #f1f1f1, #ededed) !important;\n  background: -moz-linear-gradient(top, #f1f1f1, #ededed) !important;\n  background: -o-linear-gradient(top, #f1f1f1, #ededed) !important;\n  background: -ms-linear-gradient(top, #f1f1f1, #ededed) !important;\n  background: linear-gradient(180deg, #f1f1f1, #ededed) !important;\n  *background: #f1f1f1 !important;\n}\n\n.ruyitao-selector-prefix-product-item-separator {\n  float: left;\n  height: 100%;\n  width: 0;\n  border-left: 1px solid #b7b7b7;\n  border-right: 1px solid white;\n}\n\n.ruyitao-selector-prefix-product-image {\n  max-height: 50px;\n  max-width: 50px;\n  vertical-align: middle !important;\n}\n\n.ruyitao-selector-prefix-product-image-wrapper {\n  display: inline-block;\n  width: 50px;\n  height: 50px;\n  text-align: center;\n  background: white;\n  box-shadow: 0 0 5px #aaa;\n  outline: 1px solid #aaa\\9;\n  overflow: hidden;\n  vertical-align: middle;\n}\n\n.ruyitao-selector-prefix-line-height-setter {\n  display: inline-block;\n  border: 0;\n  width: 0;\n  padding: 0;\n  margin: 0;\n  height: 100%;\n  vertical-align: middle;\n}\n\n.ruyitao-selector-prefix-product-price {\n  width: 92%;\n  padding-top: 3px;\n  margin: 0 auto;\n  overflow: hidden;\n  white-space: nowrap;\n  font-family: "\u5fae\u8f6f\u96c5\u9ed1", "Microsoft YaHei", "\u5b8b\u4f53", Verdana, Geneva, sans-serif;\n}\n\n.ruyitao-selector-prefix-product-price span {\n  color: #ce0d12 !important;\n}\n\n.ruyitao-selector-prefix-product-price img {\n  margin-top: 2px;\n}\n\n#ruyitao-selector-prefix-product-list-overlay {\n  display: none;\n  position: absolute;\n  top: 0;\n  left: 0;\n  width: 100%;\n  height: 100%;\n  background-color: white;\n  opacity: 0.9;\n  filter: alpha(opacity=90);\n  text-align: center;\n}\n\n#ruyitao-selector-prefix-loading {\n  width: 50px;\n  height: 50px;\n  margin: 0 auto;\n  margin-top: 15px;\n  background: transparent url(%chrome-extension%../images/search/loading.gif) center center no-repeat;\n  border-radius: 7px;\n}\n\n#ruyitao-selector-prefix-message {\n  display: none;\n  font-size: 15px;\n  padding: 28px 20px 0 20px;\n  text-shadow: 0 1px #ccc;\n  text-align: center;\n  background: rgba(255, 255, 255, 0.5);\n  background-color: white\\9;\n  height: 100%;\n}\n/* product list bar styles end*/\n\n#ruyitao-selector-prefix-search-wrapper {\n  display: none;\n  position: relative;\n  border: none;\n  float: left;\n  right: 0;\n  top: 0;\n  height: 24px;\n  padding: 3px;\n  background-color: #fdfdfd;\n  background: -webkit-linear-gradient(top, #fdfdfd, #fcfcfc);\n  background: -o-linear-gradient(top, #fdfdfd, #fcfcfc);\n  background: -ms-linear-gradient(top, #fdfdfd, #fcfcfc);\n  background: -moz-linear-gradient(top, #fdfdfd, #fcfcfc);\n  background: linear-gradient(180deg, #fdfdfd, #fcfcfc);\n}\n\n#ruyitao-selector-prefix-search-field {\n  margin-right: 4px;\n  width: 87px;\n  height: 22px;\n  line-height: 18px;\n  line-height: 22px\\9; /* Fix for IE6-IE8 */\n  border: 1px solid #e9e9e9;\n  outline: none;\n  padding-left: 3px;\n  box-sizing: content-box;\n  font-family: "\u5fae\u8f6f\u96c5\u9ed1", "Microsoft YaHei", "\u5b8b\u4f53", Verdana, Geneva, sans-serif;\n  font-size: 12px;\n  vertical-align: middle;\n  -webkit-transition: width .2s ease-out 0.08s;\n  -moz-transition: width .2s ease-out 0.08s;\n  -o-transition: width .2s ease-out 0.08s;\n  -ms-transition: width .2s ease-out 0.08s;\n  transition: width .2s ease-out 0.08s;\n}\n\n#ruyitao-selector-prefix-search-field.ruyitao-selector-prefix-search-field-focused {\n  border: 1px solid #9cc5ea;\n  width: 135px;\n}\n\n#ruyitao-selector-prefix-search-btn {\n  width: 19px;\n  height: 19px;\n  line-height: 19px;\n  border: none;\n  border-radius: 2px;\n  background: url(%chrome-extension%../images/search/search-icon-blue.png) center center no-repeat;\n  -background: url(%chrome-extension%../images/search/search-icon-blue-8bit.png) center center no-repeat;\n  vertical-align: middle;\n  margin-right: 5px;\n}\n\n.ruyitao-selector-prefix-logo {\n  cursor: pointer;\n}\n\n#ruyitao-selector-prefix-logo {\n  float: left;\n  position: relative;\n  top: -1px;\n  left: -1px;\n  width: 35px;\n  height: 78px;\n  border: 1px solid #58b6f7;\n  border-top-left-radius: 3px;\n}\n\n.ruyitao-selector-prefix-recommend-logo {\n  background: url(%chrome-extension%../images/products/recommend-logo.png) center center no-repeat;\n}\n\n.ruyitao-selector-prefix-same-logo {\n  background: url(%chrome-extension%../images/products/same-logo.png) center center no-repeat;\n}\n\n.ruyitao-selector-prefix-similar-logo {\n  background: url(%chrome-extension%../images/products/similar-logo.png) center center no-repeat;\n}\n\n.ruyitao-selector-prefix-price-comparation-logo.ruyitao-selector-prefix-search-logo {\n  background: url(%chrome-extension%../images/shrink-logo.png) center center no-repeat;\n  width: 70px;\n  height: 30px;\n}\n\n#ruyitao-selector-prefix-current-merchant-cursor {\n  display: none;\n  position: absolute;\n  top: 0;\n  left: 0;\n  width: 12px;\n  height: 8px;\n  background: url(%chrome-extension%../images/products/arrow-down-blue.png) center center no-repeat;\n  -background: url(%chrome-extension%../images/products/arrow-down-blue-8bit.png) center center no-repeat;\n}\n\n.ruyitao-selector-prefix-current-merchant {\n  cursor: default !important;\n}\n</style>\n<div id="ruyitao-selector-prefix-products-wrapper" class="ruyitao-selector-prefix-wrapper ruyitao-selector-prefix-products-protection">\n  <div class="ruyitao-selector-prefix-products-box">\n    <div id="ruyitao-selector-prefix-logo" class="ruyitao-selector-prefix-logo"></div>\n    <div id="ruyitao-selector-prefix-prev-page-btn" class="ruyitao-selector-prefix-arrow"></div>\n    <div id="ruyitao-selector-prefix-product-list-wrapper">\n      <ul id="ruyitao-selector-prefix-product-list"></ul>\n      <div id="ruyitao-selector-prefix-product-list-overlay">\n        <div id="ruyitao-selector-prefix-loading"></div>\n      </div>\n      <div id="ruyitao-selector-prefix-message" data-i18n="content->no_products">\u62b1\u6b49\uff01\u6ca1\u6709\u627e\u5230\u76f8\u5173\u7684\u5546\u54c1</div>\n    </div>\n    <div id="ruyitao-selector-prefix-next-page-btn" class="ruyitao-selector-prefix-arrow"></div>\n    <div id="ruyitao-selector-prefix-product-detail-container"></div>\n    <div id="ruyitao-selector-prefix-products-close-btn" class="ruyitao-selector-prefix-close-btn" title="\u5173\u95ed"></div>\n  </div>\n</div>\n<div id="ruyitao-selector-prefix-price-comparation-wrapper" class="ruyitao-selector-prefix-wrapper ruyitao-selector-prefix-products-protection">\n  <div class="ruyitao-selector-prefix-price-comparation-box">\n    <div id="ruyitao-selector-prefix-price-comparation-logo" class="ruyitao-selector-prefix-price-comparation-logo ruyitao-selector-prefix-logo" title="\u5982\u610f\u6dd8 - \u6bd4\u4ef7"></div>\n    <ul id="ruyitao-selector-prefix-market-list"></ul>\n    <div id="ruyitao-selector-prefix-more-results-link"><span></span></div>\n    <div id="ruyitao-selector-prefix-func-btns-wrapper">\n      <div id="ruyitao-selector-prefix-search-in-taobao-icon" title="\u5728\u6dd8\u5b9d\u641c\u7d22"><span></span></div>\n      <div id="ruyitao-selector-prefix-author-icon" title="\u66f4\u591a\u8be5\u4f5c\u8005\u7684\u4e66"><span></span></div>\n      <div id="ruyitao-selector-prefix-error-link" title="\u62a5\u544a\u6709\u5956"><span></span></div>\n    </div>\n    <div id="ruyitao-selector-prefix-search-wrapper">\n      <form id="ruyitao-selector-prefix-search-form" action="#">\n        <input id="ruyitao-selector-prefix-search-field" type="text" /><button type="submit" id="ruyitao-selector-prefix-search-btn" hidefocus="true"></button>\n      </form>\n    </div>\n    <div id="ruyitao-selector-prefix-price-comparation-close-btn" class="ruyitao-selector-prefix-close-btn" title="\u5173\u95ed"></div>\n    <div id="ruyitao-selector-prefix-current-merchant-cursor"></div>\n  </div>\n</div>\n'
            }
        };
        U || (U = {});
        var Cb = U;
        Cb.options = {
            get_locale: function () {
                return "zh"
            }, set_search_engine: function (a) {
                a = na.stringify(a);
                Cb.cookie("search_engine", a, {expires: 3650})
            }, get_search_engine: function () {
                return na.parse(Cb.cookie("search_engine")) || {}
            }, get_api_url: function () {
                return "http://ruyi.taobao.com"
            }
        };
        U || (U = {});
        var Ea = U;
        Ea.SearchEngine = {
            has: function (a) {
                return a in Ea.constants.search_engines
            }, get: function (a) {
                return Ea.constants.search_engines[a]
            }, search_url: function (a) {
                a.Keyword = "gb" == a.encoding ? Ea.encode.gb2312.encode(a.Keyword) :
                    encodeURIComponent(a.Keyword);
                a.K = a.Keyword;
                a.P = a.ItemPage;
                a.A = Ea.constants.application;
                a.F = Ea.constants.pid;
                a.U = Ea.constants.uid;
                a.C = Ea.constants.cnaCookie;
                return a.url.replace(/{(\w+)}/g, function (b, c) {
                    return "undefined" != typeof a[c] ? a[c] : ""
                })
            }, search: function (a, b, c) {
                this.has(a) ? (a = this.get(a), b.encoding = a.encoding, b.url = a.url, Ea.ajax({
                    url: this.search_url(b) + "&callback=?",
                    success: c.success,
                    error: c.error
                })) : c.error(null, null, "Unknown search engine")
            }
        };
        U || (U = {});
        var B = U;
        B.siteStatus = {
            get: function (a) {
                var a =
                        "undefined" == typeof a ? "search" : a, b = B.constants[a + "_default_status"],
                    a = B.cookie("ruyitao_" + a + "_status");
                return null == a ? b : "1" == a
            }, set: function (a, b) {
                B.cookie("ruyitao_" + ("undefined" == typeof b ? "search" : b) + "_status", a ? "1" : "0", {expires: 3650})
            }
        };
        B.service = {
            get_site_config: function (a, b, c) {
                a = {status: B.siteStatus.get(a.type), config: B.constants.site_config.search.zh[a.domain]};
                c(a)
            }, get_site_status: function (a, b, c) {
                c(B.siteStatus.get(a.type))
            }, set_site_status: function (a, b, c) {
                B.siteStatus.set(a.status, a.type);
                c({})
            }, get_price_curve_status: function (a, b, c) {
                a = B.siteStatus.get("price_curve");
                c(a)
            }, set_price_curve_status: function (a) {
                B.siteStatus.set(a.status, "price_curve")
            }, get_price_comparation_and_history_prices_data: function (a, b, c) {
                var b = B.service.helper.getPid(), d = B.service.helper.cache,
                    e = "link_search_with_history_prices/" + a.link;
                d.has(e) ? c(B.service.helper.deep_copy(d.get(e))) : B.ajax({
                    url: B.options.get_api_url("zh") + "/ext/productLinkSearch",
                    data: {link: a.link, pid: b, group: "prices,item,items"},
                    success: function (a) {
                        c(B.service.helper.deep_copy(a));
                        d.set(e, a)
                    },
                    error: function () {
                        c({})
                    }
                })
            }, get_price_history_data: function (a, b, c) {
                b = B.options.get_api_url("zh") + "/ext/productLinkSearch";
                B.ajax({
                    url: b, data: {link: a.url, group: "prices,item", pid: B.constants.pid}, success: function (a) {
                        a.Item && a.Item.Prices && a.Item.Prices.length ? c(a) : c()
                    }, error: function () {
                        c()
                    }
                })
            }, get_srp_config: function (a, b, c) {
                a = B.constants.site_config.srp[a.domain] || B.constants.site_config.srp[this.helper.get_top_level_domain(a.domain)];
                c(a)
            }, item_link_search: function (a, b, c) {
                var d = B.service.helper.cache,
                    e = "link_search/" + a.link;
                d.has(e) ? c(d.get(e)) : B.ajax({
                    url: B.options.get_api_url("zh") + "/ext/productLinkSearch",
                    data: {link: a.link, pid: B.constants.pid},
                    success: function (a) {
                        c(a);
                        d.set(e, a)
                    },
                    error: function () {
                        c({})
                    }
                })
            }, get_search_engines: function (a, b, c) {
                var a = B.options.get_locale(), b = B.options.get_search_engine(), d = B.constants.search_engines,
                    e = {}, g;
                for (g in d) {
                    var p = d[g];
                    if (p.enabled) {
                        var y = p.locales.split(","), q = {
                            name: p.name,
                            title: "undefined" == typeof p.title[a] ? p.title.en : p.title[a],
                            homepage: p.homepage,
                            order: p.order,
                            host: p.host
                        };
                        q.enabled = "undefined" != typeof b[g] ? b[g] : -1 != p.locales.indexOf(a) ? p.selected : !1;
                        "undefined" == typeof e[y[0]] && (e[y[0]] = []);
                        e[y[0]].push(q)
                    }
                }
                for (var C in e) e[C].sort(function (a, b) {
                    return a.order - b.order
                });
                c({locale: a, search_engines: e})
            }, set_search_engine: function (a, b, c) {
                var b = B.options.get_search_engine(), a = a.search_engines, d;
                for (d in a) a.hasOwnProperty(d) && (b[d] = a[d]);
                B.options.set_search_engine(b);
                c({})
            }, is_book_site: function (a, b, c) {
                var b = B.constants.site_config.book, d = a.domain,
                    a = a.url, b = b[d] && b[d].patterns, e;
                if (b) for (e = b.length; e--;) {
                    if (d = b[e], a.match(RegExp(d.url))) {
                        c(d.meta);
                        break
                    }
                } else c(!1)
            }, item_search: function (a, b, c) {
                var d = a.SearchEngine;
                if ("function" == typeof this[d + "_search"]) this[d + "_search"](a, b, c); else B.SearchEngine.has(d) ? B.service.helper.search({
                    search_engine: d,
                    request: a,
                    callback: c
                }) : c({TotalPages: 0, Items: []})
            }, is_detail_site: function (a, b, c) {
                var b = a.url, d = this.helper.get_top_level_domain(b), e = !1, d = B.constants.site_config.product[d];
                if ("undefined" != typeof d) if ("undefined" !=
                    typeof d.length) for (var g = 0; g < d.length; g++) b.match(d[g]) && (e = !0); else e = !0;
                e ? B.service.helper.search({
                    search_engine: "product_search",
                    request: {Keyword: na.stringify({url: a.url, title: a.title}), ItemPage: 1},
                    callback: function (a) {
                        a.DetailPage ? a.LikeItems && a.LikeItems.length ? c({
                            locale: B.options.get_locale(),
                            likeItems: a.LikeItems,
                            likePage: a.LikePage
                        }) : "undefined" != typeof a.Items ? c({
                            locale: B.options.get_locale(),
                            product: a.Product
                        }) : c({locale: B.options.get_locale(), keyword: a.Keyword}) : c({})
                    }
                }) : c({})
            }, get_movie_config: function (a,
                                           b, c) {
                a = B.constants.site_config.movie[a.domain] || B.constants.site_config.movie[this.helper.get_top_level_domain(a.domain)];
                c(a)
            }, movie_link_search: function (a, b, c) {
                var d = this.helper.cache, e = "movie_link_search/" + a.link;
                d.has(e) ? c(d.get(e)) : B.ajax({
                    url: B.options.get_api_url("zh") + "/kanshaext",
                    data: {url: a.link, cna: B.constants.cnaCookie, uid: B.constants.uid, pid: B.constants.pid},
                    success: function (a) {
                        c(a);
                        d.set(e, a)
                    },
                    error: function () {
                        c({})
                    }
                })
            }, ajax: function (a, b, c) {
                a.success = function (a) {
                    c(a)
                };
                a.error = function () {
                    c({})
                };
                a.dataType = "jsonp";
                a.url += (-1 != a.url.indexOf("?") ? "&" : "?") + "callback=?";
                B.ajax(a)
            }, get_template: function (a, b, c) {
                a = B.constants.templates[a.page];
                a = a.replace(/%chrome-extension%/g, B.browser.extension.getURL(""));
                c(a)
            }, tab_open: function (a) {
                B.browser.tabs.create({url: a.url, selected: "undefined" == typeof a.selected ? !0 : a.selected})
            }, decode_gbk: function (a, b, c) {
                -1 == a.data.indexOf("%") ? c(a.data) : c(B.encode.gb2312.decode(a.data))
            }, ga_push: function () {
            }, send_log: function (a) {
                var b = B.constants, b = {
                    a: a.action, p: b.pid,
                    u: b.uid, v: b.version, t: Math.floor((new Date).getTime() / 1E3)
                };
                a.label && (b.l = a.label);
                a.referrer && (b.r = a.referrer);
                a = B.options.get_api_url() + "/s.gif?" + B.http_build_query(b);
                B.service.helper.sendImageLog(a)
            }
        };
        B.service.helper = {
            _imgCache: {}, _imgCacheIndex: 0, cache: {
                _data: {}, has: function (a) {
                    return this._data.hasOwnProperty(a)
                }, get: function (a) {
                    return this._data[a]
                }, set: function (a, b) {
                    this._data[a] = b
                }
            }, getPid: function () {
                return B.constants.pid
            }, sendImageLog: function (a) {
                if (a) {
                    var b = this, c = new Image, d = this._imgCacheIndex++;
                    this._imgCache[d] = c;
                    c.onload = c.onerror = function () {
                        delete b._imgCache[d]
                    };
                    c.src = a;
                    c = null
                }
            }, search: function (a) {
                var b = a.request, c = B.filter_int(b.ItemPage, 1, 1), d = a.search_engine + "/" + b.Keyword + "-" + c,
                    e = this.cache;
                e.has(d) ? a.callback(e.get(d)) : B.SearchEngine.search(a.search_engine, b, {
                    success: function (b) {
                        e.set(d, b);
                        a.callback(b)
                    }, error: function (b, c, d) {
                        a.callback({
                            Code: c,
                            Message: d ? d.toString() : "Something is wrong(May be the networking is abnormal)."
                        })
                    }
                })
            }, deep_copy: function (a) {
                var b;
                "object" == typeof a ? (b =
                    "undefined" != typeof a.length ? [] : {}, g.extend(!0, b, a)) : b = a;
                return b
            }, get_top_level_domain: function (a) {
                var b = B.parse_url(a, "PHP_URL_HOST"), a = b.match(/\.(com|co|org|net)\.(cn|uk|jp|hk|us|ca)$/) ? 3 : 2,
                    b = b.split(".");
                return b.slice(Math.max(b.length - a, 0)).join(".")
            }
        };
        var qa = U;
        qa.filterChain = function () {
            this.index = -1;
            this.chain = 0 < arguments.length ? arguments : []
        };
        qa.filterChain.prototype.register = function (a) {
            this.chain.push(a)
        };
        qa.filterChain.prototype.run = function () {
            this.index++;
            this.index < this.chain.length &&
            this.chain[this.index].run(this)
        };
        qa.i18n = {
            locale: "en", messages: {
                zh: {
                    see_detail: "\u8be6\u60c5",
                    no_results: "\u62b1\u6b49\uff01\u6ca1\u6709\u627e\u5230\u76f8\u5173\u7684\u5546\u54c1",
                    hide: "\u9690\u85cf",
                    show: "\u663e\u793a",
                    feedback: "\u53cd\u9988",
                    shoppingassist: "\u5982\u610f\u6dd8",
                    settings: "\u9009\u9879",
                    feedback_url: "http://ruyi.taobao.com/feedback",
                    choose_at_least_one: "\u8bf7\u81f3\u5c11\u9009\u4e2d\u4e00\u4e2a\u641c\u7d22\u7f51\u7ad9",
                    homepage: "\u5b98\u65b9\u7f51\u7ad9",
                    search: "\u641c\u7d22",
                    search_engine_setting: "\u641c\u7d22\u5546\u57ce\u8bbe\u7f6e",
                    search_engine_setting_title: "\u641c\u7d22\u5546\u57ce",
                    search_engine_setting_commit: "\u5b8c\u6210",
                    no_products: "\u62b1\u6b49\uff01\u6ca1\u6709\u627e\u5230\u76f8\u5173\u7684\u5546\u54c1",
                    search_engine_setting_msg: "\u8bf7\u81f3\u5c11\u9009\u62e9\u4e00\u4e2a\u5546\u57ce\u3002",
                    search_product_in: '\u5728${1}\u641c\u7d22"${2}"',
                    click_to_hide: "\u70b9\u51fb\u9690\u85cf\u641c\u7d22\u7ed3\u679c",
                    expand: "\u5c55\u5f00",
                    shrink: "\u6536\u8d77",
                    close: "\u5173\u95ed",
                    hide_searchbox: "\u9690\u85cf\u641c\u7d22\u6846"
                },
                en: {
                    see_detail: "See Detail",
                    no_results: "sorry, no results",
                    hide: "Hide",
                    show: "Show",
                    feedback: "Feedback",
                    settings: "Options",
                    shoppingassist: "Shopping Assistant",
                    homepage: "Homepage",
                    choose_at_least_one: "Please select at least one search site",
                    feedback_url: "http://spreadsheets.google.com/viewform?hl=en&formkey=dFhZVkE5ZC1veFk4YzRfVnpDRGtkTWc6MQ",
                    expand: "Expand",
                    collapse: "Collapse",
                    close: "Close",
                    search: "Search",
                    search_engine_setting: "Customize",
                    search_engine_setting_title: "Search On",
                    search_engine_setting_commit: "OK",
                    no_products: "Oops, no results",
                    search_engine_setting_msg: "Please select at least one site.",
                    search_product_in: 'Search "${2}" at ${1}',
                    click_to_hide: "Click to hide",
                    shrink: "Shrink",
                    hide_searchbox: "Hide searchbox"
                }, fr: {
                    see_detail: "Voir le d\u00e9tail",
                    no_results: "D\u00e9sol\u00e9, aucun r\u00e9sultat",
                    hide: "Hide",
                    show: "Show",
                    feedback: "Feedback",
                    settings: "Options",
                    shoppingassist: "Shopping Assistant",
                    homepage: "Homepage",
                    choose_at_least_one: "Merci de s\u00e9lectionner au moins un site de recherche",
                    feedback_url: "http://spreadsheets.google.com/viewform?hl=en&formkey=dFhZVkE5ZC1veFk4YzRfVnpDRGtkTWc6MQ",
                    expand: "Expand",
                    collapse: "Collapse",
                    close: "Close",
                    search: "Search",
                    search_engine_setting: "Customize",
                    search_engine_setting_title: "Search On",
                    search_engine_setting_commit: "OK",
                    no_products: "Oops, no results",
                    search_engine_setting_msg: "Please select at least one site.",
                    search_product_in: 'Search "${2}" at ${1}',
                    click_to_hide: "Click to hide",
                    shrink: "Shrink",
                    hide_searchbox: "Hide searchbox"
                }, it: {
                    see_detail: "Vedi dettagli",
                    no_results: "Spiacenti, nessun risultato",
                    hide: "Hide",
                    show: "Show",
                    feedback: "Feedback",
                    settings: "Opzioni",
                    shoppingassist: "Shopping Assistant",
                    homepage: "Homepage",
                    choose_at_least_one: "Prego, selezionare almeno un sito di ricerca",
                    feedback_url: "http://spreadsheets.google.com/viewform?hl=en&formkey=dFhZVkE5ZC1veFk4YzRfVnpDRGtkTWc6MQ",
                    expand: "Expand",
                    collapse: "Collapse",
                    close: "Close",
                    search: "Search",
                    search_engine_setting: "Customize",
                    search_engine_setting_title: "Search On",
                    search_engine_setting_commit: "OK",
                    no_products: "Oops, no results",
                    search_engine_setting_msg: "Please select at least one site.",
                    search_product_in: 'Search "${2}" at ${1}',
                    click_to_hide: "Click to hide",
                    shrink: "Shrink",
                    hide_searchbox: "Hide searchbox"
                }, de: {
                    see_detail: "Details anschauen",
                    no_results: "Entschuldigung, keine Suchergebnisse",
                    hide: "Verstecken",
                    show: "Zeigen",
                    feedback: "Reaktion",
                    settings: "Optionen",
                    shoppingassist: "Shopping Assistant",
                    homepage: "Startseite",
                    choose_at_least_one: "Bitte w\u00e4hlen Sie mindestens eine Seite zum Durchsuchen aus",
                    feedback_url: "http://spreadsheets.google.com/viewform?hl=en&formkey=dFhZVkE5ZC1veFk4YzRfVnpDRGtkTWc6MQ",
                    expand: "Erweitern",
                    collapse: "Zusammenbruch",
                    close: "in der N\u00e4he",
                    search: "Search",
                    search_engine_setting: "Customize",
                    search_engine_setting_title: "Search On",
                    search_engine_setting_commit: "OK",
                    no_products: "Oops, no results",
                    search_engine_setting_msg: "Please select at least one site.",
                    search_product_in: 'Search "${2}" at ${1}',
                    click_to_hide: "Click to hide",
                    shrink: "Shrink",
                    hide_searchbox: "Hide searchbox"
                }
            }, setLocale: function (a) {
                a in this.messages && (this.locale = a)
            }, getLocale: function () {
                return this.locale
            },
            getMessage: function () {
                var a = arguments, b = a[0], c = "";
                b in this.messages[this.locale] && (c = this.messages[this.locale][b], 1 < a.length && (c = c.replace(/\$\{\d\}/g, function (b) {
                    b = b.substring(2, 3);
                    return a[b]
                })));
                return c
            }
        };
        qa.extend = function (a, b, c, d) {
            if (!a || !b) return a;
            void 0 === c && (c = !0);
            var e, g, p;
            if (d && (p = d.length)) for (e = 0; e < p; e++) {
                if (g = d[e], g in b && (c || !(g in a))) a[g] = b[g]
            } else for (g in b) if (c || !(g in a)) a[g] = b[g];
            return a
        };
        qa.debounce = function (a, b, c) {
            var d;
            return function () {
                var e = this, g = arguments;
                d ? clearTimeout(d) :
                    c && a.apply(e, g);
                d = setTimeout(function () {
                    c || a.apply(e, g);
                    d = null
                }, b || 100)
            }
        };
        qa.str_repeat = function (a, b) {
            for (var c = []; 0 < b; c[--b] = a) ;
            return c.join("")
        };
        qa.sprintf = function () {
            for (var a = 0, b, c = arguments[a++], d = [], e, g, p; c;) {
                if (e = /^[^\x25]+/.exec(c)) d.push(e[0]); else if (e = /^\x25{2}/.exec(c)) d.push("%"); else if (e = /^\x25(?:(\d+)\$)?(\+)?(0|'[^$])?(-)?(\d+)?(?:\.(\d+))?([b-fosuxX])/.exec(c)) {
                    if (null == (b = arguments[e[1] || a++]) || void 0 == b) throw"Too few arguments.";
                    if (/[^s]/.test(e[7]) && "number" != typeof b) throw"Expecting number but found " +
                    typeof b;
                    switch (e[7]) {
                        case "b":
                            b = b.toString(2);
                            break;
                        case "c":
                            b = String.fromCharCode(b);
                            break;
                        case "d":
                            b = parseInt(b);
                            break;
                        case "e":
                            b = e[6] ? b.toExponential(e[6]) : b.toExponential();
                            break;
                        case "f":
                            b = e[6] ? parseFloat(b).toFixed(e[6]) : parseFloat(b);
                            break;
                        case "o":
                            b = b.toString(8);
                            break;
                        case "s":
                            b = (b = String(b)) && e[6] ? b.substring(0, e[6]) : b;
                            break;
                        case "u":
                            b = Math.abs(b);
                            break;
                        case "x":
                            b = b.toString(16);
                            break;
                        case "X":
                            b = b.toString(16).toUpperCase()
                    }
                    b = /[def]/.test(e[7]) && e[2] && 0 <= b ? "+" + b : b;
                    g = e[3] ? "0" == e[3] ? "0" :
                        e[3].charAt(1) : " ";
                    p = e[5] - String(b).length - 0;
                    g = e[5] ? qa.str_repeat(g, p) : "";
                    d.push("" + (e[4] ? b + g : g + b))
                } else throw"Huh ?!";
                c = c.substring(e[0].length)
            }
            return d.join("")
        };
        qa.format_price = function (a, b) {
            if (0 >= a) return "";
            var c = "", c = qa.sprintf("%.2f", a / 100);
            switch (b) {
                case "us":
                    c = "$" + c;
                    break;
                case "ca":
                    c = "CDN$" + c;
                    break;
                case "fr":
                case "de":
                    c = "EUR " + c;
                    break;
                case "uk":
                    c = "&#xA3;" + c;
                    break;
                default:
                    c = "$" + c
            }
            return c
        };
        qa.get_cookie = function (a) {
            for (var b = document.cookie.split("; "), c = 0, d; d = b[c] && b[c].split("="); c++) if (d[0] ===
                a) return d[1] || ""
        };
        var Sb = {}, kc = {}, lc = function () {
            var a = String.fromCharCode(Math.floor(25 * Math.random() + 97)) + Math.floor(134217728 * Math.random()).toString(36);
            if ("undefined" != typeof kc[a]) return lc();
            kc[a] = !0;
            return a
        };
        qa.transform_selector = function (a) {
            return "undefined" != typeof Sb[a] ? Sb[a] : Sb[a] = "" + lc()
        };
        qa.isNumeric = function (a) {
            return !isNaN(parseFloat(a)) && isFinite(a)
        };
        var Tb = U, X = function (a, b) {
            this.value = a;
            this.encoding = "undefined" == typeof b ? (document.charset || document.characterSet || "").toLowerCase() :
                b
        };
        X.prototype = {
            toString: function () {
                return this.value
            }, containMultbyteChar: function (a) {
                for (var b = 0, c = a.length; b < c; b++) if (128 < a.charCodeAt(0)) return !0;
                return !1
            }, getUnicode: function (a) {
                if (this.value.match(/%u[0-9a-fA-F]{4}/)) {
                    var b = this.value.replace(/%u([0-9a-fA-F]{4})/g, function (a, b) {
                        return String.fromCharCode(parseInt(b, 16))
                    });
                    a(b)
                } else this.containMultbyteChar(this.value) ? a(decodeURIComponent(this.value)) : this.encoding.match(/(x-)?(cp936|gbk|gb2312|gb18030)/) ? Tb.browser.extension.sendRequest({
                    topic: "decode_gbk",
                    data: this.value
                }, a) : a(this.value)
            }
        };
        Tb.site = {
            SearchTerm: X, get_domain: function (a) {
                return a.location && a.location.hostname ? a.location.hostname : ""
            }, get_domain_from_str: function (a) {
                var b = "undefined";
                0 == a.toLowerCase().indexOf("http://") ? (b = a.substring(7), b = "http://" + b.substring(0, b.indexOf("/"))) : 0 == a.toLowerCase().indexOf("https://") && (b = a.substring(8), b = "https://" + b.substring(0, b.indexOf("/")));
                return b
            }, get_url: function (a) {
                return a.location && a.location.href ? a.location.href : a.title ? a.title : ""
            }, get_site: function (a) {
                var b =
                    "";
                if (a) {
                    var b = 2, c = a.split(".");
                    a.match(/\.(com|co|org|net)\.(cn|uk|jp|hk|us|ca)$/) && (b += 1);
                    b = c.length >= b ? c.splice(c.length - b, c.length).join(".") : a
                }
                return b
            }, get_sub_domain: function (a, b) {
                var c = "";
                a && (c = a.length > b.length ? a.substring(0, a.length - b.length - 1) : "DUMMY");
                return c
            }, check_shopping_term: function () {
                var a = this.get_site(this.get_domain(document));
                if ("google.com" == a || "google.cn" == a || "google.com.hk" == a || "google.co.uk" == a) {
                    if (a = decodeURIComponent(document.location.href), -1 != a.indexOf("/products") ||
                    -1 != a.indexOf("tbs=bks:1") || -1 != a.indexOf("tbs=shop:1") || -1 != a.indexOf("tbm=bks") || -1 != a.indexOf("tbm=shop")) return !0
                } else {
                    if ("bing.com" == a) {
                        if (-1 != document.location.href.indexOf("/shopping/")) return !0;
                        var a = g("#sw_abarl").find("a"), b = !1;
                        g.each(a, function (a, d) {
                            -1 != g(d).attr("href").indexOf("/shopping/") && (b = !0)
                        });
                        return b
                    }
                    return !0
                }
            }, get_search_term: function (a, b) {
                if (!this.check_shopping_term()) return !1;
                var c = "", d = this.get_domain(b), e = this.get_site(d), d = this.get_sub_domain(d, e);
                a[d] && "undefined" == typeof a[d].e &&
                (c = this.extract_search_term(a[d], b));
                c && "string" == typeof c && (c = new this.SearchTerm(c));
                return c
            }, extract_search_term: function (a, b) {
                for (var c = "", d = b.location.href, e = 0; e < a.length; e++) {
                    var g = a[e].k, p = a[e].d, y = a[e].s, q = a[e].sk;
                    g && (c = this.find_search_term_from_query(d, g, p));
                    0 == c.length && y && (c = this.find_search_term_from_document(b, y), q && q == c && (c = ""));
                    if (c) break
                }
                return c
            }, find_search_term_from_query: function (a, b, c) {
                for (var d = "", a = a.split(c), b = RegExp("(?:^|\\?)" + b + '=([^#;\\?:@=&{}\\|\\\\^~\\[\\]`<>\\"]*)'),
                         c = 0; c < a.length; c++) {
                    var e = b.exec(a[c]);
                    e && (d = e[1])
                }
                d && (d = d.replace(/\+/g, " "));
                return d
            }, find_search_term_from_document: function (a, b) {
                for (var c = "", d = a.getElementsByTagName("input"), e = 0; e < d.length; e++) if (d[e].id == b || d[e].name == b) {
                    c = d[e].value;
                    break
                }
                return c ? new this.SearchTerm(c, "unicode") : c
            }
        };
        var T = U.transform_selector;
        U.IE6Patch = {
            isIE6: !1,
            barPosition: 0,
            init: function () {
                this.isIE6 = g.browser.msie && "6.0" == g.browser.version;
                this.fixHover();
                this.handleWindowScroll();
                this.handleWindowResize()
            },
            setBarPosition: function (a) {
                this.barPosition =
                    a
            },
            getBarPosition: function () {
                return this.barPosition
            },
            fixHover: function () {
                g("#" + T("product-list")).delegate("." + T("product-item"), "mouseenter", function () {
                    g(this).addClass(T("product-item-hl"))
                }).delegate("." + T("product-item"), "mouseleave", function () {
                    g(this).removeClass(T("product-item-hl"))
                });
                g("#" + T("prev-page-btn") + ", #" + T("next-page-btn")).hover(function () {
                    g(this).hasClass(T("active-arrow")) && g(this).addClass(T("active-arrow-hl"))
                }, function () {
                    g(this).removeClass(T("active-arrow-hl"))
                });
                g("#" + T("market-list")).delegate("." +
                    T("market-item"), "mouseenter", function () {
                    g(this).addClass(T("market-item-hl"))
                }).delegate("." + T("market-item"), "mouseleave", function () {
                    g(this).removeClass(T("market-item-hl"))
                });
                g("#" + T("more-results-link")).mouseenter(function () {
                    g(this).addClass(T("more-results-link-hl"))
                }).mouseleave(function () {
                    g(this).removeClass(T("more-results-link-hl"))
                });
                g("#" + T("func-btns-wrapper")).delegate("div", "mouseenter", function () {
                    g(this).addClass(T("func-btn-hl"))
                }).delegate("div", "mouseleave", function () {
                    g(this).removeClass(T("func-btn-hl"))
                });
                g("#" + T("merchant-list")).delegate("." + T("merchant-item"), "mouseenter", function () {
                    g(this).addClass(T("merchant-item-hl"))
                }).delegate("." + T("merchant-item"), "mouseleave", function () {
                    g(this).removeClass(T("merchant-item-hl"))
                })
            },
            fixImageMaxSize: function (a, b) {
                a.load(function () {
                    if (a.width() > b || a.height() > b) a.width() > a.height() ? a.width(b) : a.height(b)
                })
            },
            scrollTimer: null,
            visibleWrapper: null,
            handleWindowScroll: function () {
                var a = this, b = g("#" + T("controller-bar")), c = g("#" + T("products-wrapper")),
                    d = g("#" + T("price-comparation-wrapper")),
                    e = g("#" + T("shrink-bar"));
                g(window).scroll(function () {
                    clearTimeout(a.scrollTimer);
                    a.visibleWrapper || (c.is(":visible") ? a.visibleWrapper = c : d.is(":visible") ? a.visibleWrapper = d : e.is(":visible") && (a.visibleWrapper = e), b.hide(), c.hide(), d.hide(), e.hide());
                    a.scrollTimer = setTimeout(function () {
                        a.resetPosition();
                        a.visibleWrapper && (a.visibleWrapper === c && b.show(), a.visibleWrapper.show(), a.visibleWrapper = null)
                    }, 200)
                })
            },
            resizeTimer: null,
            handleWindowResize: function () {
                var a = this;
                g(window).resize(function () {
                    clearTimeout(a.resizeTimer);
                    a.resizeTimer = setTimeout(function () {
                        a.resetPosition()
                    }, 200)
                })
            },
            viewPortHeight: 0,
            CONTROL_BAR_BOTTOM_WITH_PRICE_COMPARATION: 48,
            CONTROL_BAR_BOTTOM_WITH_SEARCH: 79,
            resetPosition: function () {
                var a = g("#" + T("controller-bar")), b = g("#" + T("products-wrapper")),
                    c = g("#" + T("price-comparation-wrapper")),
                    d = (this.viewPortHeight = document.documentElement.clientHeight) + g(document).scrollTop(),
                    e = d - b.outerHeight(), d = d - c.outerHeight();
                a.css("bottom", this.CONTROL_BAR_BOTTOM_WITH_SEARCH + "px");
                b.css("top", e + "px");
                c.css("top",
                    d + "px")
            }
        };
        var lb = U;
        lb.SearchBox || (lb.SearchBox = {});
        var L = lb.transform_selector;
        lb.SearchBox.Tmpl = {
            getSearchEngineSettingTemplate: function (a, b) {
                var c = a.length, d = [], e;
                a.reverse();
                for (var g = 0; g < c; g++) e = a[g], e = '<li id="' + L("se-" + e.name) + '" class="' + L("merchant-item") + '" data-se-id="' + e.name + '">' + e.title + "</li>", d.push(e);
                "zh" == b && (e = '<li id="' + L("se-etao") + '" class="' + L("merchant-item") + " " + L("merchant-selected") + '" data-se-id="etao">\u6240\u6709\u5546\u57ce</li>', d.push(e));
                return d.join("")
            }, getSearchEnginesTemplate: function (a) {
                for (var b =
                    a.length, c = [], d, e = 0; e < b; e++) d = a[e], c.push('<li id="' + L("se-" + d.name) + '" data-se-id="' + d.name + '" class="' + L("se") + '" data-se-name="' + d.title + '">'), c.push('<img src="' + d.icon + '" /></li>'), 0 == e && c.push('<li class="' + L("separator-se") + " " + L("separator-small") + " " + L("ib") + '"></li>');
                return c.join("")
            }, getProductsTemplate: function (a) {
                for (var b = a.length, c, d = lb.SearchBox.Util.getURL("../images/loading.gif"), d = '<span class="' + L("product-image-wrapper") + '"><img class="' + L("product-image") + '" src="' + d + '" /><b class="' +
                    L("line-height-setter") + '"></b></span>', e, g = [], p = 0; p < b; p++) c = a[p], e = c.preferredPrice, c = '<li class="' + L("product-item") + '" data-click-url="' + c.detailUrl + '">', "<img" != e.substring(0, 4) && (e = '<span class="' + L("product-price-wrapper") + '">' + e + "</span>"), e = '<div class="' + L("product-price") + '">' + e + "</div>", g.push(c + d + e + "</li>");
                return g.join("")
            }, getProductDetailTemplate: function (a) {
                var b = [], c = a.Title, d = a.productUsedPrice, e = a.productPrice, g = a.productFastTrack,
                    p = a.productRatingStars;
                b.push('<div id="' + L("product-title") +
                    '">');
                b.push('<span id="' + L("product-page-link") + '" title="' + c + '" data-href="' + a.productDetailUrl + '">' + c + "</span>");
                b.push('</div><div id="' + L("product-price") + '">');
                b.push('<span id="' + L("product-used-price") + '">' + d + "</span>");
                b.push('<span id="' + L("product-now-price") + '">' + e + "</span>");
                b.push('</div><div id="' + L("product-image") + '">');
                b.push('<img data-href="' + a.productDetailUrl + '" src="' + a.productImageUrl + '" />');
                b.push('<span class="' + L("line-height-setter") + '"></span></div>');
                b.push('<div id="' +
                    L("product-fast-trick") + '">' + g + "</div>");
                b.push('<div id="' + L("product-rating-stars") + '">' + p + "</div>");
                return b.join("")
            }, getMarketsTemplate: function (a, b) {
                for (var c = [], d, e = !1, g, p = 0, y = a.length; p < y; p++) g = a[p], 0 < p && (!e && g.BSeller != d) && (e = !0, c.push('<li class="' + L("market-icon") + " " + L("market-unimportant") + '"></li>')), d = g.BSeller, c.push(this.getMarketTemplate(g, p, b));
                e && c.unshift('<li class="' + L("market-icon") + " " + L("market-important") + '"></li>');
                return c.join("")
            }, getMarketTemplate: function (a, b, c) {
                var d =
                    [], e = "";
                b === c && (e = " " + L("current-merchant"));
                d.push('<li class="' + L("market-item") + e + '" data-href="' + a.DetailUrl + '" >');
                d.push('<div class="' + L("price") + '">' + a.Price + "</div>");
                0 == b ? d.push('<div class="' + L("market-name") + " " + L("market-name-hightlight") + '">' + a.ShopName + "</div>") : d.push('<div class="' + L("market-name") + '">' + a.ShopName + "</div>");
                d.push("</li>");
                return d.join("")
            }, getLikeItemsTemplate: function (a) {
                for (var b = [], c = a.length, d, e = 0; e < c; e++) d = a[e], b.push('<li class="ruyitao-like-product-item" data-large-image-url="' +
                    d.LargeImageUrl + '" data-title="' + d.Title + '">'), b.push('<a hideFocus="true" href="' + d.DetailPageURL + '" target="_blank" class="ruyitao-like-product-image ruyitao-log">'), b.push('<img class="ruyitao-small-image" src="' + d.SmallImageUrl + '" />'), b.push('<b class="ruyitao-line-height-setter"></b></a></li>');
                return b.join("")
            }, getPriceCurveTipTemplate: function () {
                var a = [];
                a.push('<div id="' + L("price-curve-tip") + '">');
                a.push('<div id="' + L("current-point-date") + '"></div>');
                a.push('<div id="' + L("current-point-price") +
                    '"></div>');
                a.push('<div id="' + L("price-curve-arrow-down") + '"></div></div>');
                return a.join("")
            }, getPriceInfoTemplate: function (a, b, c) {
                return '\u6700\u9ad8\u4ef7\uff1a<span class="' + L("highest-price") + '">\uffe5' + b + '</span>\u6700\u4f4e\u4ef7\uff1a<span class="' + L("lowest-price") + '">\uffe5' + a + "</span>" + (c ? '<a class="' + L("follow-price") + '" href="http://connect.etao.com/emailnotify/index.php?tb_lm_id=ryt_ext&nid=' + c + '" target="_blank" title="\u5173\u6ce8\u964d\u4ef7"></a>' : "")
            }, getTopTipContentTemplate: function (a,
                                                   b) {
                var c = "",
                    d = '<a class="' + L("check-out-more-merchants-in-tip") + '"target="_blank" href="${moreMerchantsLink}">\u67e5\u770b\u66f4\u591a\u5546\u5bb6</a>';
                "cheap" == a ? c = "\u672c\u7f51\u7ad9\u5728\u91cd\u70b9\u5546\u5bb6\u4e2d\u4ef7\u683c<strong>\u6700\u4f4e\uff01</strong>" + d : "expensive" == a && (c = '<strong>${relativeMerchantName}</strong>\u8981\u4fbf\u5b9c<strong>\uffe5${priceDiff}\u5143\uff01</strong><a target="_blank" href="${relativeMerchantLink}">\u53bb\u770b\u770b</a>' + d);
                if (c) for (var e in b) c = c.replace("${" +
                    e + "}", b[e]);
                return c
            }
        };
        U || (U = {});
        var $ = U;
        $.PageCache = function (a, b, c) {
            return c ? new $.PageCache.async(a, b) : new $.PageCache.sync(a, b)
        };
        $.PageCache.sync = function (a, b) {
            0 != arguments.length && (this.page_no = -1, this.pager_total_entries = this.pager_total_pages = void 0, this.cache = [], "function" == typeof a ? (this.generator = a, this.generator_finished = !1) : (this.pager = a.get, this.pager_page_size = a.PageSize), this.page_size = b.PageSize)
        };
        $.PageCache.sync.prototype = {
            next: function () {
                var a = [];
                this.hasNext() && (this.page_no++,
                    a = this.get(this.page_no + 1).Entries, 0 == a.length && this.page_no--);
                return a
            }, previous: function () {
                var a = [];
                this.hasPrevious() && (this.page_no--, a = this.get(this.page_no + 1).Entries);
                return a
            }, hasNext: function () {
                var a = this.getTotalPages();
                return isNaN(a) ? !0 : this.page_no + 1 < a
            }, hasPrevious: function () {
                return 0 < this.page_no
            }, getTotalPages: function () {
                var a;
                if (this.pager) {
                    if ("undefined" == typeof this.pager_total_pages) return NaN;
                    a = "undefined" == typeof this.pager_total_entries ? "undefined" != typeof this.cache[this.pager_total_pages -
                    1] ? (this.pager_total_pages - 1) * this.pager_page_size + this.cache[this.pager_total_pages - 1].Entries.length : this.pager_total_pages * this.pager_page_size : this.pager_total_entries
                } else if (this.generator_finished) a = this.cache.length; else return NaN;
                return Math.ceil(a / this.page_size)
            }, get: function (a) {
                a = parseInt(a);
                if (isNaN(a) || 1 > a) a = 1;
                var b = [], c = (a - 1) * this.page_size, a = a * this.page_size;
                if (this.pager) {
                    for (var d = Math.floor(c / this.pager_page_size), e = Math.ceil(a / this.pager_page_size), g = d; g < e; g++) {
                        "undefined" == typeof this.cache[g] &&
                        (this.cache[g] = this.pager(g + 1));
                        var p = this.pager_page_size * g;
                        b.push.apply(b, this.cache[g].Entries.slice(p >= c ? 0 : c - p, p + this.pager_page_size > a ? a - p : this.pager_page_size));
                        "undefined" == typeof this.pager_total_pages && (this.pager_total_pages = this.cache[g].TotalPages);
                        e = Math.min(e, this.pager_total_pages)
                    }
                    "undefined" != typeof this.cache[d] && this.cache[d].TotalEntries && (this.pager_total_entries = this.cache[d].TotalEntries)
                } else {
                    for (; !this.generator_finished && this.cache.length < a;) b = this.generator(), 0 == b.length &&
                    (this.generator_finished = !0), this.cache.push.apply(this.cache, b);
                    b = this.cache.slice(c, a)
                }
                return {TotalPages: this.getTotalPages(), Entries: b}
            }, reset: function () {
                this.page_no = -1
            }
        };
        $.PageCache.async = function (a, b) {
            $.PageCache.sync.call(this, a, b)
        };
        $.PageCache.async.prototype = new $.PageCache.sync;
        $.PageCache.async.prototype.constructor = $.PageCache.async;
        $.PageCache.async.prototype.next = function (a) {
            if (this.hasNext()) {
                this.page_no++;
                var b = this;
                this.get(this.page_no + 1, function (c) {
                    c = c.Entries;
                    0 == c.length && b.page_no--;
                    a(c)
                })
            } else a([])
        };
        $.PageCache.async.prototype.previous = function (a) {
            this.hasPrevious() ? (this.page_no--, this.get(this.page_no + 1, function (b) {
                a(b.Entries)
            })) : a([])
        };
        $.PageCache.async.prototype.get = function (a, b) {
            var c = this, a = parseInt(a);
            if (isNaN(a) || 1 > a) a = 1;
            var d = (a - 1) * this.page_size, e = a * this.page_size, g = [], p = function () {
                b({TotalPages: c.getTotalPages(), Entries: g}, a)
            };
            if (this.pager) {
                var y = Math.floor(d / this.pager_page_size), q = Math.ceil(e / this.pager_page_size),
                    B = function (a, b) {
                        if (a >= q) "undefined" != typeof c.cache[y] &&
                        c.cache[y].TotalEntries && (c.pager_total_entries = c.cache[y].TotalEntries), p(); else {
                            var g = function (a, g) {
                                a -= 1;
                                c.cache[a] = g;
                                var m = c.pager_page_size * a;
                                b.push.apply(b, c.cache[a].Entries.slice(m >= d ? 0 : d - m, m + c.pager_page_size > e ? e - m : c.pager_page_size));
                                "undefined" == typeof c.pager_total_pages && (c.pager_total_pages = c.cache[a].TotalPages);
                                q = Math.min(q, c.pager_total_pages);
                                B(a + 1, b)
                            };
                            "undefined" == typeof c.cache[a] ? c.pager(a + 1, g) : g(a + 1, c.cache[a])
                        }
                    };
                B(y, g)
            } else if (!this.generator_finished && this.cache.length < e) {
                var C =
                    function (a) {
                        a && 0 == a.length && (c.generator_finished = !0);
                        c.cache.push.apply(c.cache, a);
                        !c.generator_finished && c.cache.length < e ? c.generator(C) : (g = c.cache.slice(d, e), p())
                    };
                this.generator(C)
            } else g = c.cache.slice(d, e), p()
        };
        var da = U, Ub = window, Fa = document;
        da.SearchBox || (da.SearchBox = {});
        var mc = da.transform_selector;
        da.SearchBox.Util = {
            getClickUrl: function (a, b) {
                da.browser.extension.sendRequest({topic: "construct_click_url", url: a}, b)
            },
            getURL: function (a) {
                return da.browser.extension.getURL(a)
            },
            getCurrentTab: function (a) {
                da.browser.extension.sendRequest({topic: "get_current_tab"},
                    a)
            },
            openTab: function (a, b, c) {
                da.browser.extension.sendRequest({topic: "tab_open", url: a, selected: b || !1}, c)
            },
            closeTab: function (a, b) {
                da.browser.extension.sendRequest({topic: "close_tab", tabId: a}, b)
            },
            activeTab: function (a, b) {
                da.browser.extension.sendRequest({topic: "active_tab", tabId: a}, b)
            },
            sendLog: function (a, b) {
                var c = {topic: "send_log", action: a, referrer: document.referrer};
                "undefined" != typeof b && (c.label = b);
                da.browser.extension.sendRequest(c)
            },
            _imgCache: {},
            _imgCacheIndex: 0,
            sendImageLog: function (a) {
                if (a) {
                    var b =
                        this, c = new Image, d = this._imgCacheIndex++;
                    this._imgCache[d] = c;
                    c.onload = c.onerror = function () {
                        delete b._imgCache[d]
                    };
                    c.src = a;
                    c = null
                }
            },
            getViewPortWidth: function () {
                return "CSS1Compat" == Fa.compatMode ? Fa.documentElement.clientWidth : Fa.body.clientWidth
            },
            getViewPortHeight: function () {
                return "CSS1Compat" == Fa.compatMode ? Fa.documentElement.clientHeight : Fa.body.clientHeight
            },
            getOverlayWidth: function () {
                var a = this.getViewPortWidth();
                return Math.max(a, Fa.body.scrollWidth)
            },
            getOverlayHeight: function () {
                var a = this.getViewPortHeight();
                return Math.max(a, Fa.body.scrollHeight)
            },
            getScrollPosition: function () {
                var a = g.browser.webkit, b = Fa.body, c = Fa.documentElement;
                return {top: a ? b.scrollTop : c.scrollTop, left: a ? b.scrollLeft : c.scrollLeft}
            },
            handleSogou: function () {
                /SE\s\d\.X\sMetaSr\s\d\.\d/g.test(Ub.navigator.userAgent) && g("#" + mc("option-link")).hide()
            },
            replaceTemplateSelectors: function (a) {
                return a.replace(/ruyitao-selector-prefix-([\w_-]+)/g, function (a, c) {
                    return da.transform_selector(c)
                })
            },
            getTemplate: function (a, b) {
                var c = this;
                da.browser.extension.sendRequest({
                    topic: "get_template",
                    page: a
                }, function (a) {
                    "function" == typeof da.loadJQuery && (g = Ua = da.loadJQuery());
                    a = da.SearchBox.Util.replaceTemplateSelectors(a);
                    c.sanitizeHTML(a, function (a) {
                        b(a)
                    })
                })
            },
            sanitizeHTML: function (a, b) {
                var c = a.replace(/<script\b[\s\S]*?<\/script\s*>/g, "").replace(/\bon[A-z]+\s*=\s*['"]?[^>"]+['"]?/g, " ").replace(/href\s*=\s*['"]?\s*javascript:/g, " ");
                b(c)
            },
            addEvent: function (a, b, c, d) {
                a.addEventListener ? a.addEventListener(b, c, d || !1) : a.attachEvent && a.attachEvent("on" + b, c)
            },
            addThousandSeparator: function (a) {
                if (!isNaN(+a)) {
                    var a =
                        a + "", b = a.split(".")[0], a = a.split(".")[1];
                    return b.replace(/(\d)(?=(?:\d{3})+\b)/g, "$1,") + (a ? "." + a : "")
                }
            },
            ajax: function (a, b) {
                a.topic = "ajax";
                da.browser.extension.sendRequest(a, b)
            },
            mergeStyleSheets: function () {
                if (!g.browser.msie || !document.styleSheets) return !0;
                var a = document.styleSheets, b = document.getElementsByTagName("style"),
                    c = document.getElementsByTagName("link");
                if (32 > b.length + c.length || !a[0].cssText) return !0;
                for (var a = document.styleSheets[0], b = g("." + mc("stylesheet")), d = 0; d < b.length; d++) {
                    c = b.get(d);
                    try {
                        a.cssText += c.styleSheet.cssText, g(c).remove()
                    } catch (e) {
                        return !1
                    }
                }
                return !0
            },
            parseImagePrice: function (a, b) {
                var c = a.attr("data-lazyload");
                c || (c = a.attr("src"));
                da.browser.extension.sendRequest({topic: "parse_image_price", domain: Ub.location.hostname, url: c}, b)
            },
            loadJQuery: function () {
                "undefined" == typeof g && "function" == typeof da.loadJQuery && (g = Ua = da.loadJQuery())
            },
            parsePriceString: function (a) {
                if (a) {
                    var b = /\d+(?:\.\d+)?/.exec(a);
                    b && (a = b[0], a = parseFloat(a))
                }
                return a
            },
            getTopLevelDomain: function (a) {
                a = /[a-z0-9_-]+\.(?:com|net|org)/ig.exec(a);
                return !a ? null : a[0].toLowerCase()
            },
            getSiteMetaInfo: function (a) {
                a = this.getTopLevelDomain(a);
                return !a ? null : this.siteMetaInfo[a]
            },
            siteMetaInfo: {
                "360buy.com": {name: "\u4eac\u4e1c"},
                "51buy.com": {name: "\u6613\u8fc5"},
                "suning.com": {name: "\u82cf\u5b81\u6613\u8d2d"}
            },
            randomAppend: function (a, b) {
                var c = g(a).find("> *"), d = c.length, d = parseInt(Math.random() * d);
                c.eq(d).after(b)
            },
            openFeedback: function (a, b) {
                var c = "http://ruyi.taobao.com/bug/item/" + a + "?ref=" + (b || encodeURIComponent(Ub.location.href));
                da.SearchBox.Util.sendLog("click_compare",
                    c);
                da.SearchBox.Util.openTab(c, !0)
            }
        };
        var La = U;
        La.SearchBox || (La.SearchBox = {});
        var nc = La.SearchBox, ba = La.transform_selector;
        nc.UI = {
            visibleProductNum: null, init: function () {
            }, activateControlIcon: function (a) {
                g(a).addClass("" + ba("active-control-icon"));
                g(a).hasClass("" + ba("se")) && this.updateSearchEngineTitle(a, !0)
            }, inactivateControlIcon: function (a) {
                g(a).removeClass("" + ba("active-control-icon"));
                g(a).hasClass("" + ba("se")) && this.updateSearchEngineTitle(a, !1)
            }, isActiveControlIcon: function (a) {
                return g(a).hasClass("" +
                    ba("active-control-icon"))
            }, updateSearchEngineTitle: function (a, b) {
                var c = g(a), d = c.attr("data-se-name"), e = nc.App.getKeyword(),
                    d = La.i18n.getMessage("search_product_in", d, e);
                b && (d = La.i18n.getMessage("click_to_hide"));
                c.attr("title", d)
            }, showOptionList: function () {
                g("#" + ba("option-list-content")).show()
            }, hideOptionList: function () {
                g("#" + ba("option-list-content")).hide()
            }, showSearchBar: function () {
                g("#" + ba("search-bar")).show();
                this.activateControlIcon(g("#" + ba("search-icon")))
            }, hideSearchBar: function () {
                g("#" +
                    ba("search-bar")).hide();
                this.inactivateControlIcon(g("#" + ba("search-icon")))
            }, focusSearch: function () {
                g("#" + ba("search")).get(0).focus()
            }, focusSearchBar: function () {
                g("#" + ba("search-bar")).addClass("" + ba("search-focus"))
            }, blurSearchBar: function () {
                g("#" + ba("search-bar")).removeClass("" + ba("search-focus"))
            }, searchBarStatus: function () {
                return g("#" + ba("search-bar")).is(":visible")
            }, showSearchEngineSetting: function () {
                g("#" + ba("search-engines-setting")).show();
                this.activateControlIcon(g("#" + ba("plus-btn")))
            },
            hideSearchEngineSetting: function () {
                g("#" + ba("search-engines-setting")).hide();
                this.inactivateControlIcon(g("#" + ba("plus-btn")))
            }, showSearchEngineSettingMsg: function () {
                g("#" + ba("ses-msg")).show()
            }, hideSearchEngineSettingMsg: function () {
                g("#" + ba("ses-msg")).hide()
            }, hideOtherPopups: function (a) {
                g("." + ba("popup")).filter('[id!="' + a + '"]').hide()
            }, hidePopups: function () {
                this.hideOptionList();
                this.hideSearchEngineSetting();
                var a = La.i18n.getMessage("search_engine_setting");
                g("#" + ba("plus-btn")).attr("title",
                    a)
            }, showControlBar: function () {
                g.browser.msie && 9 > parseInt(g.browser.version) ? g("#" + ba("controller-bar")).css("filter", "") : g("#" + ba("controller-bar")).css("opacity", 1)
            }, enableSearchEngineHover: function () {
                g("#" + ba("search-engines")).addClass("" + ba("se-hover-enabled"))
            }, disableSearchEngineHover: function () {
                g("#" + ba("search-engines")).removeClass("" + ba("se-hover-enabled"))
            }
        };
        var Ga = U, oc = document;
        Ga.SearchBox || (Ga.SearchBox = {});
        var Kc = Ga.SearchBox.Util, pc = Ga.SearchBox.Tmpl, ab, qc, mb, Pa = Ga.transform_selector;
        Ga.SearchBox.SearchEngines = {
            init: function () {
                this.renderEnabledSearchEngines();
                this.registerEvents()
            }, registerEvents: function () {
                var a = this;
                g("#" + Pa("submit-ses-btn")).click(function (b) {
                    b.preventDefault();
                    a.submit()
                })
            }, getAll: function (a) {
                var b = this;
                Ga.browser.extension.sendRequest({topic: "get_search_engines"}, function (c) {
                    ab = na.parse(na.stringify(c.search_engines));
                    b.setEnabled(ab);
                    b.setLocale(c.locale);
                    a(c)
                })
            }, updateCached: function (a) {
                var b, c, d, e;
                for (e in ab) if (ab.hasOwnProperty(e)) {
                    b = ab[e];
                    for (var g =
                        0, p = b.length; g < p; g++) c = b[g], d = c.name, a.hasOwnProperty(d) && (c.enabled = a[d])
                }
            }, setLocale: function (a) {
                mb = a;
                Ga.i18n.setLocale(a)
            }, getLocale: function () {
                return mb
            }, getCachedAll: function () {
                return ab
            }, filter: function (a) {
                for (var b = Ga.site.get_site(oc.location.hostname), c = [], d = 0, e = a.length; d < e; d++) {
                    var g = a[d];
                    g.host && b.match(g.host) || ("etao" == g.name || ("paipai.com" == b || "eachnet.com" == b) && "taobao" == g.name) || c.push(g)
                }
                return c
            }, sort: function (a) {
                a.sort(function (a, c) {
                    return "etao" == a.name ? -1 : "etao" == c.name ? 1 : a.order -
                        c.order
                })
            }, getCurrentLocaleSearchEngines: function () {
                var a = this.getCachedAll(), b = this.getLocale(), c = [], d;
                for (d in a) a.hasOwnProperty(d) && d == b && (c = Array.prototype.concat.apply(c, a[d]));
                return c
            }, renderSearchEngineSettingHtml: function () {
                var a = this.getCurrentLocaleSearchEngines(), a = this.filter(a),
                    a = pc.getSearchEngineSettingTemplate(a, this.getLocale());
                g("#" + Pa("merchant-list")).html(a)
            }, renderEnabledSearchEngines: function () {
                var a = this.getEnabled();
                this.sort(a);
                g("#" + Pa("search-engine-item-template")).html();
                g.each(a, function (a, c) {
                    c.icon = c.icon || Kc.getURL("../images/search/se-icons/" + c.name + ".png")
                });
                a = pc.getSearchEnginesTemplate(a);
                g("#" + Pa("search-engines")).html(a)
            }, setSearchEngineSettingPosition: function () {
                var a = g("#" + Pa("plus-btn")), b = g("#" + Pa("search-engines-setting")),
                    a = a.position().left + a.width() / 2, c = b.outerWidth(), a = a - c / 2;
                0 > a && (a = 0);
                b.css("left", a + "px")
            }, getEnabled: function () {
                return qc
            }, setEnabled: function (a) {
                var a = a || this.getCachedAll(), b = Ga.site.get_site(oc.location.hostname), c = [], d = function (d) {
                    var d =
                        a[d], e, g;
                    e = 0;
                    for (g = d.length; e < g; e++) {
                        var q = d[e];
                        if (q.enabled && (!q.host || !b.match(q.host))) (!("paipai.com" == b || "eachnet.com" == b) || !("taobao" == q.name || "etao" == q.name)) && c.push(q)
                    }
                };
                a[mb] && d(mb);
                for (var e in a) a.hasOwnProperty(e) && e != mb && d(e);
                qc = c
            }
        };
        var ca = U, Vb = window;
        ca.SearchBox || (ca.SearchBox = {});
        var X = ca.SearchBox, Ha = X.Util, Wb = X.Tmpl, C = ca.transform_selector, bb = X.Products = {
            DEFAULT_SEARCH_ENGINE: "etao",
            BOOK_AUTHOR_SEARCH_ENGINE: "amazoncn_book",
            SAME_PRODUCTS_SEARCH_ENGINE: "product_search",
            keyword: "",
            searchEngine: "",
            productNumPerPage: 0,
            pageCache: null,
            maxPageNum: sa,
            loading: !1,
            arrowManualDisabled: !1,
            prevArrowValid: !0,
            nextArrowValid: !0,
            arrowValidDelay: 200,
            init: function () {
                var a = ea.calcProductNumByViewPortWidth();
                this.setProductNumPerPage(a);
                this.reset();
                this.registerEvents()
            },
            sendClickLog: function (a) {
                var b;
                switch (ca.currentViewType) {
                    case "same":
                        b = "click_same";
                        break;
                    case "recommend":
                        b = "click_like";
                        break;
                    case "related":
                    case "search":
                        b = "click_search"
                }
                b ? Ha.sendLog(b, a + "|" + document.location.href) : ca.console.debug("Ready to send log but no action.")
            },
            registerEvents: function () {
                var a = this, b = g("#" + C("product-list"));
                b.delegate("." + C("product-item"), "click", function () {
                    var b = g(this).attr("data-click-url");
                    Ha.openTab(b);
                    a.sendClickLog(b)
                });
                b.delegate("." + C("product-item"), "mouseenter", function () {
                    clearTimeout(Qa.timer);
                    var c = b.find("." + C("product-item")).index(this);
                    Qa.render(a.productsData[c]);
                    Qa.show(this)
                }).delegate("." + C("product-item"), "mouseleave", function () {
                    Qa.timer = setTimeout(function () {
                        Qa.hide()
                    }, Qa.delay)
                });
                g("#" + C("prev-page-btn")).click(function () {
                    if (a.hasPrevPage() &&
                        a.prevArrowValid) {
                        a.prevArrowValid = !1;
                        var b = a.getProductNumPerPage();
                        ea.setProductListWrapperWidthByProductNum(b);
                        ea.moveProductList("prev");
                        a.currentPageNum--;
                        a.setArrowStatus();
                        setTimeout(function () {
                            a.prevArrowValid = !0
                        }, a.arrowValidDelay)
                    }
                });
                g("#" + C("next-page-btn")).click(function () {
                    a.hasNextPage() && a.nextArrowValid && (a.nextArrowValid = !1, a.searchNextPage(function () {
                        ea.moveProductList("next");
                        a.setArrowStatus();
                        setTimeout(function () {
                            a.nextArrowValid = !0
                        }, a.arrowValidDelay)
                    }))
                })
            },
            reset: function () {
                var a =
                    this;
                this.productsData = [];
                this.currentPageNum = this.maxPageNum = 0;
                this.loading = !1;
                rc.cancel("searchbox_next");
                this.setSearchEngine("");
                this.setKeyword("");
                var b = 1, c = sa, d = this.getProductNumPerPage();
                this.pageCache = ca.PageCache(function (d) {
                        "undefined" == typeof c || b <= c ? ca.browser.extension.sendRequest({
                            topic: "item_search",
                            Keyword: a.getKeyword(),
                            SearchEngine: a.getSearchEngine(),
                            ItemPage: b
                        }, function (a) {
                            b++;
                            if ("Code" in a) ca.console.debug(a.Message), d([]); else return (c = a.TotalPages) ? d(a.Items) : d([])
                        }) : d([])
                    },
                    {PageSize: d}, !0)
            },
            searchNextPage: function (a) {
                var b = g("#" + C("product-list") + " ." + C("product-item")).length, c = this.getProductNumPerPage(),
                    d = c * this.currentPageNum;
                d < b ? (this.currentPageNum++, b = Math.min(b - d, c), ea.setProductListWrapperWidthByProductNum(b), a()) : (b = this.getSearchEngine(), c = this.getKeyword(), this.search(b, c, this.currentPageNum + 1, null, a))
            },
            doNewSearch: function (a, b) {
                a && b ? (this.reset(), this.search(a, b, 1, function () {
                    ea.clear();
                    ea.reset()
                })) : this.renderByData(this.productsData)
            },
            renderByData: function (a) {
                this.reset();
                ea.hideNoResult();
                this.manualDisableAllArrow();
                ea.showLoading();
                this.maxPageNum = 1;
                ea.clear();
                ea.reset();
                this.searchSuccess(a)
            },
            search: function (a, b, c, d, e) {
                var g = this;
                this.setSearchEngine(a);
                this.setKeyword(b);
                ea.hideNoResult();
                this.manualDisableAllArrow();
                ea.showLoading();
                a = rc.register("searchbox_next", function (a) {
                    g.maxPageNum = a.TotalPages || 10;
                    d && d();
                    g.searchSuccess(a.Entries, e)
                });
                this.pageCache.get(c, a)
            },
            searchSuccess: function (a, b) {
                var c = this;
                ea.hideLoading();
                this.manualEnableAllArrow();
                var d = a.length;
                d ? (a = this.filter(a), this.productsData = this.productsData.concat(a), ea.render(a), ea.setProductListWrapperWidthByProductNum(d), b && b(), this.currentPageNum++) : (this.maxPageNum = this.currentPageNum, setTimeout(function () {
                    c.nextArrowValid = !0
                }, c.arrowValidDelay), 0 == this.currentPageNum && ea.showNoResult());
                this.setArrowStatus()
            },
            filter: function (a) {
                g.each(a, function (a, c) {
                    c.SmallImageUrl = c.SmallImageUrl || ca.browser.extension.getURL("../images/no_image_available.png");
                    var d = c.Price || "", d = d.match(/too low/i) ?
                        "Too low" : -1 != d.indexOf("-") ? g.trim(d.split("-")[0]) || "&nbsp;" : g.trim(d) || "&nbsp;";
                    c.preferredPrice = d
                });
                return a
            },
            setArrowStatus: function () {
                ea.disableAllArrow();
                this.hasPrevPage() && ea.enableArrowBtn("prev");
                this.hasNextPage() && ea.enableArrowBtn("next")
            },
            hasPrevPage: function () {
                return !this.arrowManualDisabled && 1 < this.currentPageNum
            },
            hasNextPage: function () {
                return !this.arrowManualDisabled && this.currentPageNum < this.maxPageNum
            },
            manualDisableAllArrow: function () {
                this.arrowManualDisabled = !0;
                ea.disableAllArrow()
            },
            manualEnableAllArrow: function () {
                this.arrowManualDisabled = !1
            },
            getKeyword: function () {
                return this.keyword
            },
            setKeyword: function (a) {
                try {
                    this.keyword = decodeURIComponent(a)
                } catch (b) {
                    this.keyword = a
                }
            },
            getSearchEngine: function () {
                return this.searchEngine
            },
            setSearchEngine: function (a) {
                this.searchEngine = a
            },
            getProductNumPerPage: function () {
                return this.productNumPerPage
            },
            setProductNumPerPage: function (a) {
                this.productNumPerPage = a
            }
        }, ea = X.ProductsView = {
            viewPortWidth: 0, resizeTimer: null, resizeDelay: 100, init: function () {
                this.viewPortWidth =
                    Ha.getViewPortWidth();
                this.registerEvents();
                Qa.init()
            }, reset: function () {
                g("#" + C("product-list")).hide().css("left", 0).show();
                this.disableAllArrow()
            }, registerEvents: function () {
                var a = this;
                Ha.addEvent(window, "resize", function () {
                    clearTimeout(a.resizeTimer);
                    a.resizeTimer = setTimeout(function () {
                            if (Ha.getViewPortWidth() != a.viewPortWidth) {
                                a.viewPortWidth = Ha.getViewPortWidth();
                                var b = a.calcProductNumByViewPortWidth();
                                bb.setProductNumPerPage(b);
                                var b = bb.getSearchEngine(), c = bb.getKeyword();
                                bb.doNewSearch(b, c)
                            }
                        },
                        a.resizeDelay)
                });
                a.handleClose()
            }, calcProductNumByViewPortWidth: function () {
                var a = Ha.getViewPortWidth() - 20 - 20 - 60, a = Math.floor(a / 90);
                3 > a ? a = 3 : 20 < a && (a = 20);
                return a
            }, setProductListWrapperWidthByProductNum: function (a) {
                this.setProductListWrapperWidth(90 * a)
            }, show: function () {
                g("#" + C("products-wrapper")).show()
            }, hide: function () {
                g("#" + C("products-wrapper")).hide()
            }, handleClose: function () {
                g("#" + C("products-close-btn")).click(function () {
                    g("#" + C("products-wrapper")).remove()
                })
            }, render: function (a) {
                g("#" + C("product-item-template")).html();
                var b = /\.(taobao|tmall)\.com/, c = b.test(Vb.location.href);
                g.each(a, function (a, d) {
                    var g = d.DetailPageURL;
                    d.detailUrl = c && b.test(g) ? g : d.ClickUrl || g
                });
                var d = Wb.getProductsTemplate(a);
                ca.SearchBox.Util.sanitizeHTML(d, function (b) {
                    var c = g("#" + C("product-list"));
                    c.append(b);
                    var b = c.find("." + C("product-image")), d = b.length, q = b.length - a.length, w = 0;
                    b.each(function (b) {
                        b >= q && b < d && (g.browser.msie && "6.0" == g.browser.version && ca.IE6Patch.fixImageMaxSize(g(this), 50), g(this).attr("src", a[w++].SmallImageUrl))
                    })
                })
            }, clear: function () {
                g("#" +
                    C("product-list")).html("")
            }, showLoading: function () {
                g("#" + C("product-list-overlay")).show()
            }, hideLoading: function () {
                g("#" + C("product-list-overlay")).hide()
            }, showNoResult: function () {
                g("#" + C("message")).show()
            }, hideNoResult: function () {
                g("#" + C("message")).hide()
            }, hidePageTurningBtns: function () {
                g("." + C("arrow")).hide()
            }, enableArrowBtn: function (a) {
                g("#" + C(a + "-page-btn")).addClass("" + C("active-arrow"))
            }, disableArrowBtn: function (a) {
                g("#" + C(a + "-page-btn")).removeClass("" + C("active-arrow"))
            }, disableAllArrow: function () {
                this.disableArrowBtn("prev");
                this.disableArrowBtn("next")
            }, setProductListWrapperWidth: function (a) {
                203 > a && (g.browser.msie && "6.0" == g.browser.version) && (a = 203);
                g("#" + C("product-list-wrapper")).width(a)
            }, getProductListWrapperWidth: function () {
                g("#" + C("product-list-wrapper")).width()
            }, moveProductList: function (a) {
                var b = g("#" + C("product-list")), c = b.position().left, d = 90 * bb.getProductNumPerPage();
                "next" == a ? c -= d : "prev" == a && (c += d);
                b.css("left", c)
            }
        }, Qa = X.Popup = {
            timer: null, delay: 200, init: function () {
                var a = this;
                g("#" + C("product-detail-container")).mouseenter(function () {
                    clearTimeout(a.timer)
                }).mouseleave(function () {
                    a.hide()
                });
                g("#" + C("product-detail-container")).delegate("#" + C("product-page-link") + ", #" + C("product-image") + " > img", "click", function () {
                    var a = g(this).attr("data-href");
                    Ha.openTab(a);
                    bb.sendClickLog(a)
                })
            }, setPosition: function (a) {
                var b = g("#" + C("product-detail-container")), c = b.outerWidth(),
                    a = g(a).offset().left + 45 - c / 2 - 20, d = Ha.getViewPortWidth();
                0 > a && (a = -1);
                c = d - c - 20 - 20;
                a > c && (a = c);
                b.css("left", a + "px")
            }, show: function (a) {
                g("#" + C("product-detail-container")).show();
                this.setPosition(a)
            }, hide: function () {
                g("#" + C("product-detail-container")).hide()
            },
            filter: function (a) {
                a.productImageUrl = a.LargeImageUrl || a.SmallImageUrl;
                a.productUsedPrice = a.UsedPrice || "";
                a.productPrice = a.Price || "";
                a.productRatingStars = a.Stars || "";
                a.productFastTrack = a.FastTrack || "";
                var b = /\.(taobao|tmall)\.com/, c = b.test(Vb.location.href), d = a.DetailPageURL;
                a.productDetailUrl = c && b.test(d) ? d : a.ClickUrl || d;
                return a
            }, render: function (a) {
                var b = g("#" + C("product-detail-container")), c, d = 240;
                a.Popup ? (b.addClass(C("product-detail-container-for-etao")), this.renderForEtao(a), c = g("#" + C("product-image-for-etao") +
                    " img"), d = 100) : (b.removeClass(C("product-detail-container-for-etao")), a = this.filter(a), g("#" + C("product-detail-template")).html(), a = Wb.getProductDetailTemplate(a), ca.SearchBox.Util.sanitizeHTML(a, function (a) {
                    g("#" + C("product-detail-container")).html("").append(a);
                    c = g("#" + C("product-image") + " img")
                }));
                g.browser.msie && "6.0" == g.browser.version && ca.IE6Patch.fixImageMaxSize(c, d)
            }, renderForEtao: function (a) {
                var b = a.Popup, c = g("#" + C("product-detail-container"));
                g.trim(a.popupHTML) ? (b = a.popupHTML, c.html("").append(b)) :
                    0 == b.indexOf("http://") ? (c.html('<div class="' + C("popup-loading") + '"></div>'), ca.browser.extension.sendRequest({
                        topic: "ajax",
                        url: b,
                        dataType: "text"
                    }, function (b) {
                        (b = g.trim(b)) && "string" == typeof b ? (b = ca.SearchBox.Util.replaceTemplateSelectors(b), ca.SearchBox.Util.sanitizeHTML(b, function (b) {
                            a.popupHTML = b;
                            c.html("").append(b)
                        })) : c.hide()
                    })) : c.html("").append(b)
            }
        }, rc = {
            callback_id: 1, callbacks: {}, keys: function (a) {
                var b = [], c;
                for (c in a) b.push(c);
                return b
            }, register: function (a, b) {
                var c = this;
                this.cancel(a);
                var d =
                    this.callback_id++;
                this.callbacks[a][d] = b;
                return function () {
                    var b = c.get(a, d);
                    b && (b.apply(b, arguments), c.cancel(a))
                }
            }, cancel: function (a) {
                this.callbacks[a] = {}
            }, get: function (a, b) {
                if ("object" == typeof this.callbacks[a] && "function" == typeof this.callbacks[a][b]) return this.callbacks[a][b]
            }
        }, Y = U, nb = document;
        Y.SearchBox || (Y.SearchBox = {});
        var X = Y.SearchBox, Db = X.UI, ob = X.Util, Ta = X.SearchEngines, Eb = X.Products, pb = X.ProductsView,
            sc = null, Xb = null, tc = null, Xa, S = Y.transform_selector;
        Y.SearchBox.App = {
            searchEngine: "",
            isFirstShown: !1, expanded: !0, run: function (a) {
                var b = this, c = Y.site.get_domain(nb), d = Y.site.get_site(c), e = function (d) {
                    d.config ? (d = b.getSearchTerm(d), Y.console.debug("get search term '" + d + "'"), d ? (ob.loadJQuery(), b.init(d)) : a.run(), b.handleAjaxSearch(c)) : a.run()
                };
                Ta.getAll(function () {
                    0 < Ta.getEnabled().length && b.getSiteConfig(d, e)
                })
            }, destory: function () {
                g("." + S("searchbox-protection")).remove()
            }, getSiteConfig: function (a, b) {
                Y.browser.extension.sendRequest({topic: "get_site_config", domain: a}, b)
            }, getSearchTerm: function (a) {
                return Y.site.get_search_term(a.config,
                    nb)
            }, getKeyword: function () {
                return Xa
            }, setKeyword: function (a) {
                tc = Xa;
                try {
                    Xa = decodeURIComponent(a)
                } catch (b) {
                    Xa = ""
                }
                g("#" + S("search")).val(Xa)
            }, handleAjaxSearch: function (a) {
                var b = this;
                if ("www.amazon.cn" == a) {
                    var c = g("#twotabsearchtextbox"), a = c.get(0).form;
                    g(a).submit(d);
                    c.change(d);
                    g("#rightResultsATF").delegate("#relatedSearches a", "mousedown", d);
                    history.pushState ? g(window).bind("popstate", d) : g(window).bind("hashchange", d);
                    var d = function () {
                        setTimeout(function () {
                            var a = c.val();
                            if (a && a != Xa) {
                                var d = b.getCurrentSearchEngine();
                                b.setKeyword(a);
                                d && b.selectSearchEngine(d)
                            }
                        }, 200)
                    }
                }
            }, init: function (a) {
                if (!g("#" + S("controller-bar")).length && !g("#" + S("products-wrapper")).length) {
                    var b = this;
                    this.fixFlash();
                    Y.SearchBox.Util.getTemplate("views/searchbox.html", function (c) {
                        ob.randomAppend(document.body, c);
                        Ta.init();
                        b.doI18n();
                        b.registerEvents();
                        Y.currentViewType = "search";
                        var d = Ta.getEnabled()[0].name;
                        Eb.init();
                        pb.init();
                        ob.handleSogou();
                        c = function (a) {
                            b.setKeyword(a);
                            Ta.renderSearchEngineSettingHtml();
                            g.browser.msie && "6.0" == g.browser.version &&
                            Y.IE6Patch.init();
                            b.selectSearchEngine(d);
                            b.getSiteStatus("search", function (c) {
                                c || (Eb.doNewSearch(d, a), b.hideControlBar(), pb.hide(), b.showShrinkBar())
                            });
                            Y.i18n.getLocale();
                            ob.sendLog("show_search", document.location.href)
                        };
                        "object" == typeof a && "function" == typeof a.getUnicode ? a.getUnicode(c) : c(a)
                    })
                }
            }, fixFlash: function () {
                var a = g('embed[type="application/x-shockwave-flash"]'), b = null;
                g.each(a, function (a, d) {
                    b = g(d).clone(!0);
                    b.attr("wmode", "transparent");
                    g(d).replaceWith(b)
                })
            }, showControlBar: function () {
                g("#" +
                    S("controller-bar")).show()
            }, hideControlBar: function () {
                g("#" + S("controller-bar")).hide()
            }, showShrinkBar: function () {
                g("#" + S("shrink-bar")).show()
            }, hideShrinkBar: function () {
                g("#" + S("shrink-bar")).hide()
            }, registerEvents: function () {
                var a = this;
                g("#" + S("close-btn")).click(function () {
                    a.hideControlBar();
                    pb.hide();
                    a.setSiteStatus("search", !1);
                    a.showShrinkBar()
                });
                g(document).click(function (b) {
                    b = b.target;
                    !g(b).is("." + S("popup")) && !g(b).parents("." + S("popup")).is("." + S("popup")) && a.resetPopups()
                });
                g("#" + S("search-form")).submit(function (b) {
                    b.preventDefault();
                    if (b = g.trim(g("#" + S("search")).val())) a.setKeyword(b), a.selectSearchEngine(a.searchEngine), clearTimeout(a.hideControlBarTimer)
                });
                this._registerSearchBarEvents();
                var b = null, c = g("#" + S("merchants-selection-wrapper"));
                g("#" + S("merchants-selection-handler")).mouseenter(function () {
                    c.show()
                }).mouseleave(function () {
                    b = setTimeout(function () {
                        c.hide()
                    }, 0)
                });
                c.mouseenter(function () {
                    clearTimeout(b)
                }).mouseleave(function () {
                    g(this).hide()
                });
                g("#" + S("search-logo")).click(function () {
                    Y.SearchBox.Util.openTab("http://ruyi.etao.com/?utm_medium=ext&utm_source=ruyi",
                        !0)
                });
                g("#" + S("merchant-list")).delegate("." + S("merchant-item"), "click", function () {
                    var b = S("merchant-selected"), c = g(this);
                    c.siblings("." + b).removeClass(b);
                    c.addClass(b);
                    g("#" + S("current-merchant-name")).text(c.text());
                    b = c.attr("data-se-id");
                    b != a.getCurrentSearchEngine() && (a.setSiteStatus("search", !0), a.selectSearchEngine(b))
                });
                g("#" + S("shrink-bar")).click(function () {
                    a.hideShrinkBar();
                    pb.show();
                    a.showControlBar();
                    a.setSiteStatus("search", !0)
                })
            }, _registerSearchBarEvents: function () {
                var a;
                g("#" + S("search")).focus(function () {
                    Db.focusSearchBar()
                }).blur(function () {
                    a &&
                    clearTimeout(a);
                    a = setTimeout(function () {
                        Db.blurSearchBar()
                    }, 200)
                });
                g("#" + S("search-btn")).click(function () {
                    a && clearTimeout(a);
                    Db.focusSearch()
                })
            }, setPosition: function (a) {
                if (g.browser.msie && "6.0" == g.browser.version) {
                    var b;
                    "active" == a ? b = 76 : "inactive" == a && (b = 0);
                    Y.IE6Patch.setBarPosition(b);
                    Y.IE6Patch.resetPosition()
                } else a = S(a + "-position"), a = S("wrapper") + " " + S("searchbox-protection") + " " + a, g("#" + S("controller-bar")).attr("class", a)
            }, getSiteStatus: function (a, b) {
                Y.browser.extension.sendRequest({
                    topic: "get_site_status",
                    type: a, domain: Y.site.get_site(Y.site.get_domain(nb))
                }, function (a) {
                    b(a)
                })
            }, setSiteStatus: function (a, b) {
                Y.browser.extension.sendRequest({
                    topic: "set_site_status",
                    domain: Y.site.get_site(Y.site.get_domain(nb)),
                    type: a,
                    status: b
                })
            }, checkCurrentSearchEngineIsEnabled: function () {
                for (var a = Ta.getEnabled(), b = this.getCurrentSearchEngine(), c = 0, d = a.length; c < d; c++) if (a[c].name == b) return !0;
                return !1
            }, selectSearchEngine: function (a) {
                this.searchEngine = a;
                var b = g("#" + S("se-" + a));
                if (a != Eb.getSearchEngine() || tc != this.getKeyword()) b.addClass(S("merchant-selected")),
                    g("#" + S("current-merchant-name")).text(b.text()), Eb.doNewSearch(a, this.getKeyword());
                pb.show();
                this.setCurrentSearchEngine(a)
            }, resetPopups: function () {
                Db.hidePopups();
                this.setActiveControllerIcon(null)
            }, getActiveControllerIcon: function () {
                return Xb
            }, setActiveControllerIcon: function (a) {
                Xb = a
            }, getCurrentSearchEngine: function () {
                return sc
            }, setCurrentSearchEngine: function (a) {
                sc = a
            }, doI18n: function () {
                var a = Ta.getLocale(), b, c, d;
                g("." + S("wrapper") + " [data-i18n]").each(function () {
                    b = g(this).attr("data-i18n");
                    c =
                        b.split("->");
                    d = c[1];
                    "content" == c[0] ? g(this).html(Y.i18n.getMessage(d)) : "attribute" == c[0] && (d = d.split(":"), g(this).attr(d[0], Y.i18n.getMessage(d[1])))
                });
                "zh" == a ? (a = ob.getURL("../images/search/search-cn.png"), g("#" + S("search-icon") + " img").attr("src", a)) : (g("#" + S("search-logo")).hide(), g("#" + S("non-zh-logo")).show(), g("#" + S("shrink-bar")).addClass(S("shrink-bar-en")).attr("title", "Click to show Shopping Assistant"), g("#" + S("merchants-selection-wrapper")).css("left", "76px"))
            }
        };
        var cb = U, ia = cb.transform_selector;
        cb.ControlBar = {
            init: function (a) {
                this.bindEvents();
                this.setPosition(a);
                g.browser.msie && "6.0" == g.browser.version && cb.IE6Patch.init()
            },
            bindEvents: function () {
                g("#" + ia("products-close-btn")).click(function () {
                    g("#" + ia("products-wrapper")).hide()
                });
                this._registerSearchBarEvents()
            },
            _registerSearchBarEvents: function () {
                var a = this, b;
                g("#" + ia("search")).focus(function () {
                    a.focusSearchBar()
                }).blur(function () {
                    b && clearTimeout(b);
                    b = setTimeout(function () {
                        a.blurSearchBar()
                    }, 200)
                });
                g("#" + ia("search-btn")).click(function () {
                    b &&
                    clearTimeout(b);
                    a.focusSearch()
                })
            },
            CONTROL_BAR_BOTTOM_WITH_PRICE_COMPARATION: 46,
            CONTROL_BAR_BOTTOM_WITH_SEARCH: 76,
            CONTROL_BAR_BOTTOM_WITH_NOTHING: 0,
            setPosition: function (a) {
                if (g.browser.msie && "6.0" == g.browser.version) {
                    var b;
                    "product" == a ? b = this.CONTROL_BAR_BOTTOM_WITH_PRICE_COMPARATION : "search" == a ? b = this.CONTROL_BAR_BOTTOM_WITH_SEARCH : "hide" == a && (b = this.CONTROL_BAR_BOTTOM_WITH_NOTHING);
                    cb.IE6Patch.setBarPosition(b);
                    cb.IE6Patch.resetPosition()
                } else a = ia(a + "-bottom"), a = ia("wrapper") + " " + ia("products-protection") +
                    " " + a, g("#" + ia("controller-bar")).attr("class", a)
            },
            showSearchBar: function () {
                g("#" + ia("search-bar")).show()
            },
            hideSearchBar: function () {
                g("#" + ia("search-bar")).hide()
            },
            focusSearch: function () {
                g("#" + ia("search")).get(0).focus()
            },
            focusSearchBar: function () {
                g("#" + ia("search-bar")).addClass("" + ia("search-focus"))
            },
            blurSearchBar: function () {
                g("#" + ia("search-bar")).removeClass("" + ia("search-focus"))
            },
            setKeyword: function (a) {
                g("#" + ia("search")).val(a)
            }
        };
        var qb = window, q = U, dd = function (a) {
            for (var b, c, d = a.length, e,
                     m; d--;) e = a[d], c = g(e.xpath), m = RegExp(e.regexp, "i"), g.each(c, function () {
                var a;
                if (a = (this.innerHTML || "").match(m)) return b = a[1], !1
            });
            return b
        }, uc = q.site, Fb = q.browser.extension, vc = qb.document, aa = q.SearchBox.Util, F = q.transform_selector;
        q.shareWeibo = function (a) {
            var b = encodeURIComponent, c = window.screen, d = [], e = "http://v.t.sina.com.cn/share/share.php?";
            for (name in a) a.hasOwnProperty(name) && d.push(name + "=" + b(a[name]));
            d.push("appkey=1965387856");
            e += d.join("&");
            window.open(e, "mb", ["toolbar=0,status=0,resizable=1,width=620,height=450,left=",
                (c.width - 620) / 2, ",top=", (c.height - 450) / 2].join(""))
        };
        var rb = q.PriceComparationsUI = {
            viewPortWidth: 0, _ICON_CLASSNAME: F("market-icon"), _widthArr: null, init: function () {
                this.viewPortWidth = document.documentElement.clientWidth;
                this._widthArr = this._getMarketListWidthArr();
                this.adjustMarketListWidth();
                this.bindEvents()
            }, bindEvents: function () {
                var a = this, b = q.debounce(function () {
                    document.documentElement.clientWidth != a.viewPortWidth && (a.viewPortWidth = document.documentElement.clientWidth, a.adjustMarketListWidth(),
                        q.ItemBar.markCurrentMerchant())
                });
                aa.addEvent(window, "resize", b)
            }, _getMarketListWidthArr: function () {
                var a = this, b = g("#" + F("price-comparation-wrapper")).is(":hidden"), c = 0, d = [];
                b && g("#" + F("price-comparation-wrapper")).css({visible: "hidden"}).show();
                g("#" + F("market-list") + " li").each(function (b, m) {
                    c += g(m).outerWidth(!0);
                    d.push({isIcon: g(m).hasClass(a._ICON_CLASSNAME), width: c})
                });
                b && g("#" + F("price-comparation-wrapper")).hide().css({visible: ""});
                return d
            }, adjustMarketListWidth: function () {
                for (var a, b, c =
                    document.documentElement.clientWidth - 97 - 20 - 260, d = !1, e = this._widthArr.length - 1; 0 <= e && !(b = this._widthArr[e], a = b.width, (d = d || b.isIcon) && this._widthArr[0].isIcon && (a -= this._widthArr[0].width), (2 > e || a <= c) && !b.isIcon); e--) ;
                d ? this.hideIcon() : this.showIcon();
                this.setMarketListWidth(a + 2)
            }, showIcon: function () {
                g("#" + F("price-comparation-wrapper") + " ." + this._ICON_CLASSNAME).show()
            }, hideIcon: function () {
                g("#" + F("price-comparation-wrapper") + " ." + this._ICON_CLASSNAME).hide()
            }, setMarketListWidth: function (a) {
                g("#" +
                    F("market-list")).width(a)
            }, show: function () {
                g("#" + F("price-comparation-wrapper")).show()
            }, hide: function () {
                g("#" + F("price-comparation-wrapper")).hide()
            }
        };
        q.ItemBar = {
            _max_items: sa,
            _loading: !1,
            _page_size: sa,
            _total_pages: sa,
            _page: 0,
            _has_more_books: !1,
            moreBooksOfAuthor: null,
            productNum: 0,
            priceComparationInfo: {
                valid: !1,
                type: "",
                currentPrice: sa,
                currentMerchantName: "",
                productTitle: "",
                relativeMerchantName: "",
                priceDiff: sa
            },
            destory: function () {
                g("#" + F("products-style")).remove();
                g("#" + F("controller-bar")).remove();
                g("#" + F("products-wrapper")).remove();
                g("#" + F("price-comparation-wrapper")).remove()
            },
            initPriceComparation: function (a) {
                var b = this, c = a.productList, d = a.product;
                this.productNum = c.length;
                q.SearchBox.Util.getTemplate("views/products.html", function (e) {
                    aa.randomAppend(document.body, e);
                    setTimeout(function () {
                        g.browser.msie && (aa.mergeStyleSheets() || b.destory(), "6.0" == g.browser.version && q.IE6Patch.init());
                        q.SearchBox.Products.init();
                        q.SearchBox.ProductsView.init();
                        var e = b.calcCurrentMerchantIndex(c, d);
                        b.renderMarketList(c,
                            e);
                        rb.init();
                        rb.show();
                        b.markCurrentMerchant();
                        b.bindEvents(d);
                        b.checkMoreBooksOfAuthor(a.book_author);
                        aa.sendLog("show_product", document.location.href);
                        aa.handleSogou()
                    }, 0)
                })
            },
            calcCurrentMerchantIndex: function (a, b) {
                for (var c, d = 0, e = a.length; d < e; d++) if (b.ItemNid && b.ItemNid == a[d].nid) {
                    c = d;
                    break
                }
                return c
            },
            markCurrentMerchant: function () {
                var a = g("." + F("current-merchant")).eq(0), b = g("#" + F("current-merchant-cursor")),
                    c = g("#" + F("market-list")), d = c.find("." + F("market-item")), c = parseInt(c.width() / 120);
                a.length &&
                d.index(a) <= c - 1 ? (a = a.position().left + 54, b.show().css("left", a + "px")) : b.hide()
            },
            isSameProduct: function (a) {
                return a && a.Epid && 14 < a.Epid.length && 3 <= a.Epid.charAt(0)
            },
            initSame: function (a) {
                var b = this;
                this.productNum = a.productList.length;
                this.sameProductsKeyword = a.Keyword;
                q.SearchBox.Util.getTemplate("views/products.html", function (c) {
                    aa.randomAppend(document.body, c);
                    b.updateLogo("same");
                    q.currentViewType = "same";
                    q.SearchBox.ProductsView.hidePageTurningBtns();
                    g.browser.msie && (aa.mergeStyleSheets(), "6.0" ==
                    g.browser.version && q.IE6Patch.init());
                    q.SearchBox.Products.init();
                    q.SearchBox.ProductsView.init();
                    q.SearchBox.Products.doNewSearch(q.SearchBox.Products.SAME_PRODUCTS_SEARCH_ENGINE, b.sameProductsKeyword);
                    b.handleLogoClick();
                    q.SearchBox.ProductsView.show();
                    b.checkMoreBooksOfAuthor(a.book_author);
                    aa.sendLog("show_same", document.location.href);
                    aa.handleSogou()
                })
            },
            initLike: function (a) {
                var b = this, c = a.productList;
                this.productNum = c.length;
                q.SearchBox.Util.getTemplate("views/products.html", function (d) {
                    aa.randomAppend(document.body,
                        d);
                    b.updateLogo("recommend");
                    q.currentViewType = "recommend";
                    q.SearchBox.ProductsView.hidePageTurningBtns();
                    g.browser.msie && (aa.mergeStyleSheets(), "6.0" == g.browser.version && q.IE6Patch.init());
                    q.SearchBox.Products.init();
                    q.SearchBox.ProductsView.init();
                    q.etaoLike.render(c);
                    b.handleLogoClick();
                    q.SearchBox.ProductsView.show();
                    b.checkMoreBooksOfAuthor(a.book_author);
                    var e = document.location.href;
                    if ("object" == typeof c[0] && "undefined" != typeof c[0].DetailPageURL) {
                        var m = !1;
                        g.each(c[0].DetailPageURL.split(/[?&]/),
                            function () {
                                0 == this.indexOf("tb_lm_id=") && !m && (aa.sendLog("show_like", e.replace(/&tb_lm_id=[^&]*/, "").replace(/\?tb_lm_id=[^&]*&/, "?") + "&" + this), m = !0)
                            });
                        m || aa.sendLog("show_like", e)
                    }
                    aa.handleSogou()
                })
            },
            initRelated: function (a) {
                var b = this;
                q.SearchBox.Util.getTemplate("views/products.html", function (c) {
                    aa.randomAppend(document.body, c);
                    b.updateLogo("similar");
                    q.currentViewType = "related";
                    g.browser.msie && (aa.mergeStyleSheets() || b.destory(), "6.0" == g.browser.version && q.IE6Patch.init());
                    q.SearchBox.Products.init();
                    q.SearchBox.ProductsView.init();
                    0 < a.length && (q.SearchBox.Products.doNewSearch(q.SearchBox.Products.DEFAULT_SEARCH_ENGINE, a), q.SearchBox.ProductsView.show(), b.handleLogoClick());
                    aa.sendLog("show_product", document.location.href);
                    aa.handleSogou()
                })
            },
            initSearch: function () {
                var a = this;
                q.SearchBox.Util.getTemplate("views/products.html", function (b) {
                    aa.randomAppend(document.body, b);
                    g("#" + F("price-comparation-logo")).addClass(F("search-logo")).attr("title", "\u5982\u610f\u6dd8 - \u641c\u7d22");
                    g("#" + F("price-comparation-wrapper")).height(30);
                    g("#" + F("search-wrapper")).show();
                    g("#" + F("more-results-link")).hide();
                    g("#" + F("func-btns-wrapper")).hide();
                    g.browser.msie && (aa.mergeStyleSheets() || a.destory(), "6.0" == g.browser.version && q.IE6Patch.init());
                    rb.show();
                    a.handleSearch();
                    a.handleLogoClick();
                    a.handleClose();
                    aa.handleSogou();
                    g("#" + F("search-field")).focus()
                })
            },
            updateLogo: function (a) {
                g("#" + F("logo")).attr("title", "\u5982\u610f\u6dd8 - " + {
                    same: "\u540c\u6b3e\u5546\u54c1",
                    recommend: "\u5546\u54c1\u63a8\u8350",
                    similar: "\u76f8\u5173\u5546\u54c1"
                }[a]).addClass(F(a +
                    "-logo"))
            },
            bindEvents: function (a) {
                var b = document.location.href;
                g("#" + F("market-list")).delegate("." + F("market-item"), "click", function () {
                    if (!g(this).hasClass(F("current-merchant"))) {
                        var a = g(this).attr("data-href");
                        aa.openTab(a);
                        aa.sendLog("click_product", a + "|" + b)
                    }
                });
                g("#" + F("more-results-link")).click(function () {
                    q.SearchBox.Util.openTab(a.DetailPageURL, !0);
                    aa.sendLog("click_product", a.DetailPageURL + "|" + b)
                });
                var c = a.book ? ["\u300a", "\u300b"] : ["\u201c", "\u201d"], d = a.DetailPageURL, e;
                a.SmallImageUrl && (e =
                    a.SmallImageUrl.replace("_80x80.jpg", ""));
                var m = a.Title, p = {
                    url: d,
                    title: "\u64e6\uff01\u5982\u610f\u6dd8\u771f\u662f\u8d2d\u7269\u795e\u5668\uff01\u770b\u5230\u5546\u54c1\u5c31\u80fd\u6bd4\u4ef7\uff0c\u4e0d\u6bd4\u4e0d\u77e5\u9053\uff0c\u4e00\u6bd4\u7701\u4e0d\u5c11\uff01\u521a\u7528@\u5982\u610f\u6dd8 \u67e5\u4e86" + c[0] + m + c[1] + "\uff0c\uff08\u5b98\u65b9\u7f51\u7ad9\uff1ahttp://t.cn/aeDbuE\uff09",
                    pic: e
                };
                this.shareWeiboImpl = function () {
                    q.shareWeibo(p)
                };
                g("#" + F("error-link")).click(function () {
                    var b = "";
                    "undefined" != typeof a.ItemNid && (b = a.ItemNid);
                    q.SearchBox.Util.openFeedback(a.Epid, b)
                });
                q.PriceCurve.triggerShareWeibo();
                var c = m.replace(/(?:\(|\uff08)[^(^)^\uff08^\uff09]+(?:\)|\uff09)/g, ""),
                    y = "http://s.taobao.com/search?tb_lm_id=ryt_ext&q=";
                q.browser.extension.sendRequest({topic: "encode_gbk", str: c}, function (a) {
                    a && (y += a)
                });
                g("#" + F("search-in-taobao-icon")).attr("title", "\u5728\u6dd8\u5b9d\u641c\u7d22\u201c" + c + "\u201d").click(function () {
                    q.SearchBox.Util.openTab(y, !0);
                    aa.sendLog("click_product", y + "|" +
                        b)
                });
                this.handleLogoClick();
                this.handleClose()
            },
            handleClose: function () {
                g("#" + F("price-comparation-close-btn")).click(function () {
                    g("#" + F("price-comparation-wrapper")).remove()
                })
            },
            handleSearch: function () {
                var a = null;
                g("#" + F("search-field")).focus(function () {
                    g(this).addClass(F("search-field-focused"))
                }).blur(function () {
                    var b = g(this);
                    a = setTimeout(function () {
                        b.removeClass(F("search-field-focused"))
                    }, 100)
                });
                g("#" + F("search-form")).submit(function (b) {
                    b.preventDefault();
                    clearTimeout(a);
                    b = g("#" + F("search-field")).val();
                    (b = g.trim(b)) ? q.SearchBox.Util.openTab("http://s.etao.com/search?tb_lm_id=ryt_ext&q=" + b, !0) : (g("#" + F("search-btn")).blur(), g("#" + F("search-field")).focus())
                })
            },
            handleLogoClick: function () {
                g("." + F("logo")).click(function () {
                    q.SearchBox.Util.openTab("http://ruyi.etao.com/?utm_medium=ext&utm_source=ruyi", !0)
                })
            },
            shareWeiboImpl: null,
            shareWeibo: function () {
                this.shareWeiboImpl && "function" == typeof this.shareWeiboImpl && this.shareWeiboImpl()
            },
            renderMarketList: function (a, b) {
                g.each(a, function (a, b) {
                    b.DetailUrl = b.ClickUrl ||
                        b.DetailPageURL
                });
                var c = q.SearchBox.Tmpl.getMarketsTemplate(a, b);
                g("#" + F("market-list")).html(c)
            },
            fillMoreBookList: function (a) {
                for (var a = this.moreBooksOfAuthor, b = g("#" + F("book-list")), c = 0, d = Math.min(a.length, 6), e = []; c < d; c++) {
                    var m = a[c];
                    e.push('<li class="' + F("book-item") + '">');
                    e.push('<a target="_blank" href="' + (m.ClickUrl || m.DetailPageURL) + '">' + m.Title + "</a>");
                    e.push("</li>");
                    c != d - 1 && e.push('<li class="' + F("book-separater") + '"></li>')
                }
                b.html(e.join(""))
            },
            hideAuthorIcon: function () {
                g("#" + F("author-icon")).hide()
            },
            checkMoreBooksOfAuthor: function (a) {
                var b = this;
                a ? (q.console.debug("Has author: " + a), Fb.sendRequest({
                    topic: "item_search",
                    Keyword: a,
                    SearchEngine: q.SearchBox.Products.BOOK_AUTHOR_SEARCH_ENGINE,
                    ItemPage: 1
                }, function (c) {
                    "object" == typeof c.Items && 0 < c.Items.length ? (q.console.debug(a + " wroted " + c.Items.length + " books."), q.ItemBar._has_more_books = !0, q.ItemBar.moreBooksOfAuthor = c.Items, q.ItemBar.author = a, g("#" + F("author-icon")).click(function () {
                        q.SearchBox.Util.openTab("http://www.amazon.cn/s?tag=ruyita-23&ie=UTF8&search-alias=books&field-author=" +
                            a, !0)
                    })) : b.hideAuthorIcon()
                })) : b.hideAuthorIcon()
            },
            parseCurrentProductPrice: function (a) {
                Fb.sendRequest({topic: "get_detail_config", domain: qb.location.hostname}, function (b) {
                    if (b && b.length) for (var c, d, e = 0; e < b.length; e++) if (c = b[e], RegExp(c.url).test(qb.location.href)) for (var m = 0; m < c.patterns.length; m++) if (d = c.patterns[m], d.price && (d = g(d.price), d.length)) {
                        "IMG" == d.get(0).tagName ? aa.parseImagePrice(d, function (b) {
                            b = aa.parsePriceString(b);
                            a(b)
                        }) : (c = d.text(), c = aa.parsePriceString(c), a(c));
                        break
                    }
                })
            },
            constructPriceComparationInfo: function (a,
                                                     b, c) {
                var d = this.priceComparationInfo;
                if (!a || !b || !c) d.valid = !1; else if (c = c[0], c.BSeller) {
                    var e = aa.getSiteMetaInfo(qb.location.hostname);
                    e ? (d.currentMerchantName = e.name, (e = aa.parsePriceString(c.Price)) ? (e = a - e, d.priceDiff = Math.abs(e).toFixed(1), 0 < e ? d.type = "expensive" : 0 > e && (d.type = "cheap"), e = b.book ? ["\u300a", "\u300b"] : ["\u201c", "\u201d"], d.productTitle = e[0] + b.Title + e[1], d.currentPrice = a, d.relativeMerchantName = c.ShopName, d.relativeMerchantLink = c.DetailUrl || c.ClickUrl || c.DetailPageURL, d.moreMerchantsLink =
                        b.DetailPageURL, d.valid = !0) : d.valid = !1) : d.valid = !1
                } else d.valid = !1
            }
        };
        q.sameBookAssist = {};
        q.sameBookAssist.run = function (a) {
            var b = uc.get_url(vc), c = uc.get_domain(vc);
            Fb.sendRequest({topic: "is_book_site", domain: c, url: b}, function (b) {
                if (b) {
                    "function" == typeof q.loadJQuery && (g = q.loadJQuery());
                    var c;
                    var m, p = {};
                    if (b) {
                        for (m in b) b.hasOwnProperty(m) && (p[m] = dd(b[m]));
                        c = p
                    } else c = void 0;
                    c.isbn ? (b = na.stringify({
                        url: qb.location.href,
                        title: qb.document.title,
                        isbn: c.isbn
                    }), q.browser.extension.sendRequest({
                        topic: "item_search",
                        Keyword: b, SearchEngine: "product_search", ItemPage: 1
                    }, function (a) {
                        "object" == typeof a.Items && 0 < a.Items.length ? (a.Product.book = c, q.ItemBar.isSameProduct(a.Product) ? q.ItemBar.initSame({
                            productList: a.Items,
                            product: a.Product,
                            Keyword: q.productSearch.getKeyword(),
                            book_author: c.author
                        }) : q.ItemBar.initPriceComparation({
                            productList: a.Items,
                            max_items: 8,
                            book_author: c.author,
                            product: a.Product
                        })) : q.ItemBar.initSearch()
                    })) : a.run()
                } else a.run()
            })
        };
        var Gb = window, oa = U;
        oa.productSearch = {
            getKeyword: function () {
                return na.stringify({
                    url: Gb.location.href,
                    title: Gb.document.title
                })
            }
        };
        oa.productSearch.run = function () {
            var a = this;
            oa.browser.extension.sendRequest({
                topic: "is_detail_site",
                url: Gb.location.href,
                title: Gb.document.title
            }, function (b) {
                if ("undefined" != typeof b.locale) {
                    var c;
                    oa.SearchBox.Util.loadJQuery();
                    b.product ? (c = a.getKeyword(), oa.browser.extension.sendRequest({
                        topic: "item_search",
                        Keyword: c,
                        SearchEngine: "product_search",
                        ItemPage: 1
                    }, function (a) {
                        oa.console.debug("1. " + a.Items.length);
                        "object" == typeof a.Items && 0 < a.Items.length && (oa.ItemBar.isSameProduct(a.Product) ?
                            oa.ItemBar.initSame({
                                productList: a.Items,
                                product: a.Product,
                                Keyword: c
                            }) : oa.ItemBar.initPriceComparation({productList: a.Items, product: a.Product}))
                    })) : b.likeItems ? oa.ItemBar.initLike({productList: b.likeItems}) : b.keyword ? oa.ItemBar.initRelated(b.keyword) : oa.ItemBar.initSearch()
                }
            })
        };
        var wc = U;
        wc.etaoLike = {
            _productList: null, render: function (a) {
                (a = this._productList = a || this._productList) && wc.SearchBox.Products.renderByData(a)
            }
        };
        var W = function () {
            if (!(this instanceof W)) return new W;
            this._callbacks = {};
            this._fired =
                {}
        };
        W.prototype.addListener = function (a, b) {
            return this._callbacks = this._callbacks || {}, this._callbacks[a] = this._callbacks[a] || [], this._callbacks[a].push(b), this
        };
        W.prototype.bind = W.prototype.addListener;
        W.prototype.on = W.prototype.addListener;
        W.prototype.await = W.prototype.addListener;
        W.prototype.removeListener = function (a, b) {
            var c = this._callbacks, d;
            if (a) {
                if (c) if (b) {
                    var e = c[a];
                    if (!e) return this;
                    d = e.length;
                    for (c = 0; c < d; c++) if (b === e[c]) {
                        e[c] = null;
                        break
                    }
                } else c[a] = []
            } else this._callbacks = {};
            return this
        };
        W.prototype.unbind =
            W.prototype.removeListener;
        W.prototype.removeAllListeners = function (a) {
            return this.unbind(a)
        };
        W.prototype.trigger = function (a, b) {
            var c, d, e, g, p, q, w = 2;
            if (!(d = this._callbacks)) return this;
            for (; w--;) if (c = w ? a : "all", c = d[c]) {
                p = 0;
                for (q = c.length; p < q; p++) (e = c[p]) ? (g = w ? Array.prototype.slice.call(arguments, 1) : arguments, e.apply(this, g)) : (c.splice(p, 1), p--, q--)
            }
            return this
        };
        W.prototype.emit = W.prototype.trigger;
        W.prototype.fire = W.prototype.trigger;
        W.prototype.once = function (a, b) {
            var c = this, d = function () {
                b.apply(c, arguments);
                c.unbind(a, d)
            };
            return this.bind(a, d), this
        };
        W.prototype.immediate = function (a, b, c) {
            return this.bind(a, b), this.trigger(a, c), this
        };
        var xc = function (a, b, c, d) {
            var e = this, g, p = 0, q = arguments.length, w, B, C, F, H = 0, L = {};
            if (3 > q) return this;
            C = Array.prototype.slice.apply(arguments, [0, q - 2]);
            B = arguments[q - 2];
            F = arguments[q - 1];
            if ("function" != typeof B) return this;
            g = C.length;
            q = function (a) {
                e[F ? "once" : "bind"](a, function (b) {
                    e._fired[a] = e._fired[a] || {};
                    e._fired[a].data = b;
                    L[a] || (L[a] = !0, H++)
                })
            };
            for (p = 0; p < g; p++) q(C[p]);
            w = function () {
                if (!(H <
                    g)) {
                    var a = [];
                    for (p = 0; p < g; p++) a.push(e._fired[C[p]].data);
                    F && e.unbind("all", w);
                    B.apply(null, a)
                }
            };
            e.bind("all", w)
        };
        W.prototype.all = function (a, b, c) {
            var d = Array.prototype.concat.apply([], arguments);
            return d.push(!0), xc.apply(this, d), this
        };
        W.prototype.assign = W.prototype.all;
        W.prototype.tail = function () {
            var a = Array.prototype.concat.apply([], arguments);
            return a.push(!1), xc.apply(this, a), this
        };
        W.prototype.assignAll = W.prototype.tail;
        W.prototype.assignAlways = W.prototype.tail;
        W.prototype.after = function (a, b, c) {
            if (0 ===
                b) return c.call(null, []), this;
            var d = this, e = [], g;
            return g = function (p, q) {
                p === a && (b--, e.push(q), 1 > b && (d.unbind("all", g), c.apply(null, [e])))
            }, d.bind("all", g), this
        };
        W.prototype.any = function () {
            var a = this, b, c, d = arguments.length;
            b = arguments[d - 1];
            var d = Array.prototype.slice.apply(arguments, [0, d - 1]), e = d.length, g = d.join("_");
            a.once(g, b);
            c = function (b) {
                a.bind(b, function (c) {
                    a.trigger(g, {data: c, eventName: b})
                })
            };
            for (b = 0; b < e; b++) c(d[b])
        };
        W.prototype.not = function (a, b) {
            this.bind("all", function (c, d) {
                c !== a && b(d)
            })
        };
        W.create =
            function () {
                var a = new W;
                return arguments.length && a.assign.apply(a, Array.prototype.slice.call(arguments)), a
            };
        U.EventProxy = W;
        var ha = U, ua = window, Hb = document, Yb = ha.SearchBox.Util, yc = ha.SearchBox.Tmpl,
            Q = ha.transform_selector;
        ha.PriceCurve = {
            proxy: null,
            expandClass: Q("price-curve-expanded"),
            site: null,
            sites: {
                "360buy.com": {
                    isDetailPage: function () {
                        var a = ua.location.href;
                        return a.match(/^http:\/\/www\.(360buy|jd)\.com\/product\/\d+\.html/) || a.match(/^http:\/\/book\.(360buy|jd)\.com\/\d+\.html/) || a.match(/^http:\/\/item\.jd\.com\/\d+\.html/)
                    },
                    getCurrentPrice: function () {
                    }, insertTemplate: function (a) {
                        var b = g("#summary-price");
                        b.length || (b = g("#priceinfo").parent());
                        if (0 < b.size()) {
                            var c = this.templateWrapper = g("<li></li>");
                            c.addClass(Q("price-curve-protection"));
                            c.insertAfter(b).append(a);
                            return !0
                        }
                        return !1
                    }, templateWrapper: null, destoryTemplateWrapper: function () {
                        this.templateWrapper && this.templateWrapper.remove()
                    }
                }, "dangdang.com": {
                    isDetailPage: function () {
                        return ua.location.href.match(/^http:\/\/product\.dangdang\.com\/(?:main2\/)?product.aspx/)
                    },
                    getCurrentPrice: function () {
                    }, insertTemplate: function (a) {
                        var b = 0 < g("#d_price").size() ? g("#d_price").parent() : g(".show_info .m_price").parent();
                        if (0 < b.size()) {
                            var c = this.templateWrapper = g("<div></div>");
                            c.addClass(Q("price-curve-protection"));
                            c.insertAfter(b).append(a);
                            return !0
                        }
                        return !1
                    }, templateWrapper: null, destoryTemplateWrapper: function () {
                        this.templateWrapper && this.templateWrapper.remove()
                    }
                }, "suning.com": {
                    isDetailPage: function () {
                        return ua.location.href.match(/suning\.com\/emall\/prd_[\d_-]+\.html/)
                    },
                    getCurrentPrice: function () {
                        var a = 0 < g("#headerBook").size() ? g("#bookprdprice em").text() : g("#mainPrice em").text();
                        if (a && a.match(/\d+\.\d+/)) return a
                    }, insertTemplate: function (a) {
                        var b = 0 < g("#headerBook").size() ? g("#yg") : g("#_main_price");
                        if (0 < b.size()) {
                            var c = this.templateWrapper = g("<li></li>");
                            c.addClass(Q("price-curve-protection"));
                            c.insertAfter(b).append(a);
                            return !0
                        }
                        return !1
                    }, templateWrapper: null, destoryTemplateWrapper: function () {
                        this.templateWrapper && this.templateWrapper.remove()
                    }
                }, "gome.com.cn": {
                    isDetailPage: function () {
                        return ua.location.href.match(/^http:\/\/www\.gome\.com\.cn\/ec\/homeus\/jump\/product\/\d+\.html/)
                    },
                    getCurrentPrice: function () {
                        var a = g(".info .price b");
                        if ((a = 0 < a.size() ? a.text() : "") && a.match(/\d+\.\d+/)) return a
                    }, insertTemplate: function (a) {
                        var b = g("#amount");
                        if (0 < b.size()) {
                            var c = this.templateWrapper = g("<div/>");
                            c.addClass(Q("price-curve-protection"));
                            ha.PriceCurve.copyStyle(c, b, ["float", "marginBottom"]);
                            c.insertAfter(b).append(a);
                            return !0
                        }
                        return !1
                    }, templateWrapper: null, destoryTemplateWrapper: function () {
                        this.templateWrapper && this.templateWrapper.remove()
                    }
                }, "coo8.com": {
                    isDetailPage: function () {
                        return ua.location.href.match(/^http:\/\/www\.coo8\.com\/product\/\d+\.html/)
                    },
                    getCurrentPrice: function () {
                    }, insertTemplate: function (a) {
                        var b = g("#prod-hotprice");
                        if (0 < b.size()) {
                            var c = this.templateWrapper = g("<dl/>"), d = g("<dt/>");
                            c.addClass(Q("price-curve-protection"));
                            ha.PriceCurve.copyStyle(d, g("dt", b), ["paddingLeft"]);
                            c.css({marginBottom: 20});
                            c.insertAfter(b).append(d.append(a));
                            return !0
                        }
                        return !1
                    }, templateWrapper: null, destoryTemplateWrapper: function () {
                        this.templateWrapper && this.templateWrapper.remove()
                    }
                }, "yihaodian.com": {
                    isDetailPage: function () {
                        return ua.location.href.match(/^http:\/\/www\.yihaodian\.com\/(?:product|item)\/\d+/)
                    },
                    getCurrentPrice: function () {
                        var a = 0 < g("#productFacadePrice").size() ? g("#productFacadePrice").text() : g("#nonMemberPrice").text();
                        if (a && a.match(/\d+\.\d+/)) return a
                    }, insertTemplate: function (a) {
                        var b = g(".specific_info1:first");
                        if (0 < b.size()) {
                            var c = this.templateWrapper = g("<div></div>");
                            c.addClass(Q("price-curve-protection"));
                            c.insertAfter(b).append(a);
                            return !0
                        }
                        return !1
                    }, templateWrapper: null, destoryTemplateWrapper: function () {
                        this.templateWrapper && this.templateWrapper.remove()
                    }
                }, "1mall.com": {
                    isDetailPage: function () {
                        return ua.location.href.match(/^http:\/\/www\.1mall\.com\/(?:product|item)\/\d+/)
                    },
                    getCurrentPrice: function () {
                        var a = 0 < g("#productFacadePrice").size() ? g("#productFacadePrice").text() : g("#nonMemberPrice").text();
                        if (a && a.match(/\d+\.\d+/)) return a
                    }, insertTemplate: function (a) {
                        var b = g(".specific_info1:first");
                        if (0 < b.size()) {
                            var c = this.templateWrapper = g("<div></div>");
                            c.addClass(Q("price-curve-protection"));
                            c.css({marginLeft: 14});
                            c.insertAfter(b).append(a);
                            return !0
                        }
                        return !1
                    }, templateWrapper: null, destoryTemplateWrapper: function () {
                        this.templateWrapper && this.templateWrapper.remove()
                    }
                }, "51buy.com": {
                    isDetailPage: function () {
                        return ua.location.href.match(/^http:\/\/item\.51buy\.com\/item-\d+\.html/)
                    },
                    getCurrentPrice: function () {
                        var a = 0 < g("#goods_detail_mate .item_icson .price_font").size() ? g("#goods_detail_mate .item_icson .price_font").text() : "";
                        if (a && a.match(/\d+\.\d+/)) return a
                    }, insertTemplate: function (a) {
                        var b = g("#goods_detail_mate .item_icson");
                        if (0 < b.size()) {
                            var c = this.templateWrapper = g("<div/>");
                            c.addClass(Q("price-curve-protection"));
                            c.css({marginTop: 10, marginLeft: "-" + b.css("paddingLeft")});
                            c.appendTo(b).append(a);
                            return !0
                        }
                        return !1
                    }, templateWrapper: null, destoryTemplateWrapper: function () {
                        this.templateWrapper &&
                        this.templateWrapper.remove()
                    }
                }
            },
            copyStyle: function (a, b, c) {
                var d = {}, e = 0;
                for (len = c.length; e < len; e++) d[c[e]] = b.css(c[e]);
                a.css(d)
            },
            init: function () {
                var a = this, b = ha.site.get_site(ha.site.get_domain(Hb));
                this.sites["jd.com"] = this.sites["360buy.com"];
                this.sites.hasOwnProperty(b) && (this.site = this.sites[b], this.site.isDetailPage(ua.location.href) && (ha.SearchBox.Util.loadJQuery(), ha.SearchBox.Util.getTemplate("views/price-curve.html", function (b) {
                    a.site.insertTemplate(b) && (a.proxy = new ha.EventProxy, a.proxy.assign("priceHistoryData",
                        "priceCurveStatus", function () {
                            a.render.apply(a, arguments);
                            a.bindEvents.apply(a)
                        }), a.getPriceHistoryData(), a.getSiteStatus())
                })))
            },
            destory: function () {
                g("#" + Q("price-curve")).remove();
                g("#" + Q("price-curve-style")).remove()
            },
            render: function (a, b) {
                this.hideLoading();
                if (a) {
                    var c = g("#" + Q("price-curve-plot")), d = this, e = this.filterPriceHistoryData(a.Item.Prices);
                    try {
                        this.drawPlot(e, c)
                    } catch (m) {
                        ha.console.debug("draw plot error: " + m.message), setTimeout(function () {
                            try {
                                d.drawPlot(e, c)
                            } catch (a) {
                                ha.console.debug("draw plot error again: " +
                                    a.message), g("#" + Q("price-curve")).remove()
                            }
                        }, 0)
                    }
                    var p = this.getPrice(e, "max"), q = this.getPrice(e, "min");
                    this.setPrices(q, p, a.Item.nid);
                    b && this.expand()
                } else this.handleNoPriceData(), this.expandClass = "" + Q("price-curve-no-data")
            },
            getSiteStatus: function () {
                var a = this, b = ha.site.get_site(ha.site.get_domain(Hb));
                ha.browser.extension.sendRequest({topic: "get_price_curve_status", domain: b}, function (b) {
                    a.proxy.trigger("priceCurveStatus", b)
                })
            },
            setSiteStatus: function (a) {
                var b = ha.site.get_site(ha.site.get_domain(Hb));
                ha.browser.extension.sendRequest({topic: "set_price_curve_status", domain: b, status: a})
            },
            getPriceHistoryData: function () {
                var a = this;
                ha.browser.extension.sendRequest({
                    topic: "get_price_history_data",
                    url: ua.location.href
                }, function (b) {
                    a.proxy.trigger("priceHistoryData", b)
                })
            },
            filterPriceHistoryData: function (a) {
                var b = 0;
                if (a) {
                    for (var c = 0, d = 0, e = a.length; d < e; d++) a[d][0] *= 1E3, a[d][0] > c && (c = a[d][0]), null == a[d][1] && (a[d][1] = sa, b++);
                    var g = new Date, p = this.site.getCurrentPrice();
                    p || (p = a[a.length - 1][1]);
                    c = new Date(parseInt(c));
                    p && (g.getMonth() == c.getMonth() ? g.getDate() != c.getDate() && (a[d] = [g.getTime(), p]) : a[d] = [g.getTime(), p]);
                    if (2 > a.length || b == e) a = null
                }
                return a
            },
            getPrice: function (a, b) {
                for (var c = [], d = 0, e = a.length; d < e; d++) a[d][1] && c.push(a[d][1]);
                return Math[b].apply(null, c)
            },
            setPrices: function (a, b, c) {
                a = yc.getPriceInfoTemplate(this.formatNum(a), this.formatNum(b), c);
                g("#" + Q("pc-price-info")).html(a)
            },
            drawPlot: function (a, b) {
                !g.plot && "function" == typeof ha.loadFlot && (g.plot = ha.loadFlot());
                var c = new Date, d = c.getTime();
                c.setMonth(c.getMonth() -
                    3);
                c.setDate(c.getDate() - 1);
                var c = c.getTime(), e = this.getPrice(a, "max"), m = this.getPrice(a, "min"), p;
                1 > e - m && (p = 2);
                g.plot(b, [a], {
                    series: {
                        lines: {show: !0, lineWidth: 1},
                        points: {show: !0, radius: 2, lineWidth: 0, fillColor: "#faaa2b"},
                        color: "#fab13c",
                        shadowSize: 1
                    },
                    grid: {
                        hoverable: !0,
                        backgroundColor: "#fff",
                        borderWidth: 1,
                        borderColor: "#d1e3ea",
                        tickColor: "#d1e3ea",
                        labelMargin: 8
                    },
                    xaxis: {min: c, max: d, mode: "time", timeformat: "%0m/%0d", tickSize: [15, "day"]},
                    yaxis: {minTickSize: 5, tickDecimals: p, tickFormatter: this.formatNum}
                })
            },
            bindEvents: function () {
                var a = this;
                g("#" + Q("price-curve-header")).click(function () {
                    g("#" + Q("price-curve")).hasClass(a.expandClass) ? a.collapse() : a.expand()
                });
                var b = null;
                g("#" + Q("price-curve-plot")).bind("plothover", function (c, d, e) {
                    e ? b != e.dataIndex && (b = e.dataIndex, a.hideTip(), c = new Date(e.datapoint[0]), c = c.getFullYear() + "/" + (c.getMonth() + 1) + "/" + c.getDate(), d = e.datapoint[1].toFixed(2), d = "\uffe5 " + Yb.addThousandSeparator(d), a.showTip(c, d, e.pageX, e.pageY)) : (a.hideTip(), b = null)
                });
                g("#" + Q("share-price-curve")).click(function (a) {
                    a.stopPropagation();
                    ha.ItemBar.shareWeibo()
                });
                g("#" + Q("pc-price-info")).delegate("." + Q("follow-price"), "click", function () {
                    Yb.sendLog("click_priceTrack", g(this).attr("href"))
                })
            },
            handleNoPriceData: function () {
                g("#" + Q("no-price-history-info")).show();
                g("#" + Q("price-curve-plot")).hide()
            },
            hideLoading: function () {
                g("#" + Q("price-curve-loading")).hide()
            },
            expand: function () {
                g("#" + Q("price-curve")).addClass(this.expandClass);
                this.showCollapseBtn();
                this.setSiteStatus(!0)
            },
            collapse: function () {
                g("#" + Q("price-curve")).removeClass(this.expandClass);
                this.showExpandBtn();
                this.setSiteStatus(!1)
            },
            _btnFlag: null,
            _BTN_FLAG_Expand: "ExpandBtn",
            _BTN_FLAG_COLLAPSE: "CollapseBtn",
            showExpandBtn: function () {
                g("#" + Q("expand-price-curve")).show();
                g("#" + Q("collapse-price-curve")).hide();
                g("#" + Q("share-price-curve")).hide();
                this._btnFlag = this._BTN_FLAG_Expand
            },
            showCollapseBtn: function () {
                g("#" + Q("expand-price-curve")).hide();
                g("#" + Q("collapse-price-curve")).show();
                this._shareWeiboFlag && g("#" + Q("share-price-curve")).show();
                this._btnFlag = this._BTN_FLAG_COLLAPSE
            },
            refreshBtn: function () {
                this._btnFlag == this._BTN_FLAG_Expand ? this.showExpandBtn() : this._btnFlag == this._BTN_FLAG_COLLAPSE && this.showCollapseBtn()
            },
            showTip: function (a, b, c, d) {
                var e = yc.getPriceCurveTipTemplate();
                g(Hb.body).append(e);
                b = "\u4ef7\u683c\uff1a" + b;
                g("#" + Q("current-point-date")).text("\u65e5\u671f\uff1a" + a);
                g("#" + Q("current-point-price")).text(b);
                a = g("#" + Q("price-curve-tip"));
                b = a.outerWidth();
                e = a.outerHeight();
                a.css({top: d - e - 15, left: c - b / 2}).addClass(Q("tip-visible"));
                g("#" + Q("price-curve-arrow-down")).css("left",
                    (b - 8) / 2)
            },
            hideTip: function () {
                g("#" + Q("price-curve-tip")).remove()
            },
            formatNum: function (a) {
                a = Math.round(100 * a) / 100;
                return a.toString().replace(/(\d)(?=(\d{3})+(?!\d))/g, "$1,")
            },
            _shareWeiboFlag: !1,
            triggerShareWeibo: function () {
                this._shareWeiboFlag = !0;
                this.refreshBtn()
            }
        };
        var R = U, sb = window, db = R.SearchBox.Util, H = R.transform_selector;
        R.SrpCompare = {
            initialized: !1,
            hideTimer: sa,
            templateInserted: !1,
            init: function () {
                var a = this;
                this.initialized || (this.initialized = !0, R.browser.extension.sendRequest({
                    topic: "get_srp_config",
                    domain: sb.location.hostname
                }, function (b) {
                    b && (db.loadJQuery(), a.bindEvents(b))
                }))
            },
            destory: function () {
                g("." + H("fast-compare-protection")).remove()
            },
            bindEvents: function (a) {
                for (var b = this, c = 0, d = a.length; c < d; c++) {
                    var e = a[c];
                    if (("undefined" == typeof e.url || RegExp(e.url).test(sb.location.href)) && "undefined" != typeof e.patterns) {
                        for (var m = !1, e = e.patterns, p = 0, q = e.length; p < q; p++) {
                            var w = e[p], B = "undefined" != typeof w.list, C = B ? g(w.list) : g(document.body);
                            0 < C.size() && (w.img && 0 < g(w.img, C).size() && w.a && 0 < g(w.a, C).size()) &&
                            (m = function (a, c) {
                                return function (d) {
                                    b.showIcon(g(d.target), a, c)
                                }
                            }(w, C), B ? C.delegate(w.img, "mouseenter", m).delegate(w.img, "mouseleave", function () {
                                b.hideTimer = setTimeout(function () {
                                    b.mouseentered || (b.hideIcon(), b.hidePopup())
                                }, 200)
                            }) : g(w.img, C).mouseenter(m).mouseleave(function () {
                                b.hideTimer = setTimeout(function () {
                                    b.mouseentered || (b.hideIcon(), b.hidePopup())
                                }, 200)
                            }), m = !0)
                        }
                        if (m) break
                    }
                }
            },
            parseCurrentProductPrice: function (a, b, c) {
                for (var d, e, m = 0; m < a.length; m++) {
                    e = b;
                    for (var p = 0; p < a[m].imgToItemLevel; p++) e =
                        e.parent();
                    d = g(a[m].selector, e).eq(0);
                    if (d.length) break
                }
                d.length && ("IMG" == d.get(0).tagName ? R.SearchBox.Util.parseImagePrice(d, function (a) {
                    var e = d, a = R.SearchBox.Util.parsePriceString(a);
                    c(a, b, e)
                }) : (a = d.text(), e = d, a = R.SearchBox.Util.parsePriceString(a), c(a, b, e)))
            },
            priceComparationInfo: {
                valid: !1,
                type: "",
                currentPrice: sa,
                currentMerchantName: "",
                productTitle: "",
                relativeMerchantName: "",
                priceDiff: sa
            },
            constructPriceComparationInfo: function (a, b, c) {
                var d = this.priceComparationInfo;
                if (!a || !b || !c) d.valid = !1; else {
                    var e =
                        db.getSiteMetaInfo(sb.location.hostname);
                    e ? (d.currentMerchantName = e.name, (e = db.parsePriceString(c.Price)) ? (e = a - e, d.priceDiff = Math.abs(e).toFixed(1), 0 < e ? d.type = "expensive" : 0 > e && (d.type = "cheap"), e = b.Book ? ["\u300a", "\u300b"] : ["\u201c", "\u201d"], d.productTitle = e[0] + b.Title + e[1], d.currentPrice = a, d.relativeMerchantName = c.SiteName, d.valid = !0) : d.valid = !1) : d.valid = !1
                }
            },
            currentImageElement: null,
            selectorPattern: null,
            matchedResultList: null,
            popupVisible: !1,
            showIcon: function (a, b, c) {
                function d() {
                    R.browser.extension.sendRequest({
                        topic: "get_price_comparation_and_history_prices_data",
                        link: m.get(0).href
                    }, function (b) {
                        if (b && b.Item) {
                            var b = g("#" + H("huoyan-icon")), c = a.offset(), d = a.outerWidth(), e = a.outerHeight(),
                                m = b.width(), q = b.height();
                            b.css({top: c.top + e - q - 1 + "px", left: c.left + (d - m) / 2 + "px"}).show()
                        }
                    })
                }

                if (!this.popupVisible) {
                    this.hideTimer && (clearTimeout(this.hideTimer), this.hideTimer = sa);
                    var e = g(b.img, c).index(a);
                    if (-1 != e) {
                        var m = g(b.a, c).eq(e);
                        0 != m.size() && (this.templateInserted ? d() : this.insertTemplateAndBindEvents(function () {
                            d()
                        }), this.currentImageElement = a, this.selectorPattern = b, this.matchedResultList =
                            c)
                    }
                }
            },
            hideIcon: function () {
                g("#" + H("huoyan-icon")).hide()
            },
            showPopup: function (a, b, c) {
                a = this.currentImageElement;
                b = this.selectorPattern;
                c = this.matchedResultList;
                if (a && b && c) {
                    var d = this;
                    this.currentImageElement = a;
                    d.hideTimer && (clearTimeout(d.hideTimer), d.hideTimer = sa);
                    var e = g(b.img, c).index(a);
                    -1 != e && (c = g(b.a, c).eq(e), 0 != c.size() && (d.hidePopup(), R.browser.extension.sendRequest({
                        topic: "get_price_comparation_and_history_prices_data",
                        link: c.get(0).href
                    }, function (c) {
                        if (c && c.Item) {
                            var e = c.Items, q = c.Item;
                            if ("undefined" !=
                                typeof q) {
                                d.searchResult = c;
                                var w = g("#" + H("huoyan-wrapper")).show();
                                this.popupVisible = !0;
                                var B = g("#" + H("fast-compare"));
                                g("#" + H("no-price-comparation-info")).hide();
                                var C = g("#" + H("huoyan-header"));
                                if (e && 0 < e.length) {
                                    for (var F = [], L, Q, R = 0, U = e.length; R < U; R++) L = e[R], Q = "" + H("fc-item"), F.push('<li class="' + Q + '" title="' + L.SiteName + '"><a class="' + H("fc-item-link") + '" href="javascript:void(0);" data-click-url="' + L.ClickUrl + '"><img width="16" height="16" class="' + H("fc-item-img") + '" alt="' + L.SiteName + '" src="' +
                                        L.SiteLogo + '" /><span class="' + H("fc-item-price") + '">' + L.Price + "</span></a></li>");
                                    g("#" + H("fc-list")).empty().append(F.join("\n"));
                                    B.show();
                                    C.width(425);
                                    C = 427
                                } else C.width(314), setTimeout(function () {
                                    B.hide()
                                }, 0), C = 316;
                                d.renderPlot(q.Prices, q);
                                var q = b.price, F = a.attr(H("detected-price")), T = c.Product, S;
                                e && (S = e[0]);
                                F ? d.constructPriceComparationInfo(F, T, S) : q && q.length && d.parseCurrentProductPrice(q, a, function (b) {
                                    a.attr(H("detected-price"), b);
                                    d.constructPriceComparationInfo(b, T, S)
                                });
                                c = g("#" + H("huoyan-wrapper") +
                                    " ." + H("fc-arrow"));
                                arrow_width = c.width();
                                e = a.offset();
                                w.outerHeight();
                                parseInt(c.css("height"));
                                q = e.top + a.outerHeight() / 2 - w.outerHeight() / 2;
                                F = e.left + a.outerWidth() + arrow_width;
                                L = g(document.body).scrollLeft() + document.documentElement.clientWidth;
                                F + C < L ? (c.removeClass(H("fc-arrow-right")), c.css({left: -1 * arrow_width})) : (c.addClass("" + H("fc-arrow-right")), F = e.left - arrow_width - C, c.css({left: C - 2}));
                                w.css({top: q, left: F})
                            }
                        }
                    })))
                }
            },
            hidePopup: function () {
                g("#" + H("huoyan-wrapper")).hide();
                this.popupVisible = !1
            },
            insertTemplateAndBindEvents: function (a) {
                var b = this;
                R.SearchBox.Util.getTemplate("views/srp-compare.html", function (c) {
                    if (!b.templateInserted) {
                        b.templateInserted = !0;
                        R.SearchBox.Util.randomAppend(document.body, c);
                        R.SearchBox.Util.sendLog("show_compare", sb.location.href);
                        g("#" + H("huoyan-wrapper")).mouseenter(function () {
                            b.hideTimer && (b.mouseentered = !0, clearTimeout(b.hideTimer), b.hideTimer = sa)
                        }).mouseleave(function () {
                            b.mouseentered = !1;
                            b.hidePopup();
                            b.hideIcon()
                        });
                        g("#" + H("fast-compare")).delegate("." + H("fc-item-link"),
                            "click", function () {
                                var a = g(this).attr("data-click-url");
                                R.browser.extension.sendRequest({topic: "tab_open", url: a});
                                R.SearchBox.Util.sendLog("click_compare", a + "|" + sb.location.href)
                            });
                        g("#" + H("fc-product-link")).click(function () {
                            b.searchResult && ("undefined" != typeof b.searchResult.Product && "undefined" != typeof b.searchResult.Product.DetailPageURL) && (R.SearchBox.Util.sendLog("click_compare", b.searchResult.Product.DetailPageURL), window.open(b.searchResult.Product.DetailPageURL))
                        });
                        g("#" + H("fc-error-link")).click(function () {
                            if (b.searchResult &&
                                "undefined" != typeof b.searchResult.Product && "undefined" != typeof b.searchResult.Product.Epid) {
                                var a = "";
                                "undefined" !== typeof b.searchResult.Item && "undefined" !== typeof b.searchResult.Item.nid && (a = b.searchResult.Item.nid);
                                R.SearchBox.Util.openFeedback(b.searchResult.Product.Epid, a)
                            }
                        });
                        var d = null;
                        g("#" + H("hy-price-curve-plot")).bind("plothover", function (a, c, g) {
                            g ? d != g.dataIndex && (d = g.dataIndex, b.hideTip(), a = new Date(g.datapoint[0]), a = a.getFullYear() + "/" + (a.getMonth() + 1) + "/" + a.getDate(), c = g.datapoint[1].toFixed(2),
                                c = "\uffe5 " + db.addThousandSeparator(c), b.showTip(a, c, g.pageX, g.pageY)) : (b.hideTip(), d = null)
                        });
                        g("#" + H("fc-share")).click(function () {
                            if (b.searchResult && "undefined" != typeof b.searchResult.Item && "undefined" != typeof b.searchResult.Item.DetailPageURL) {
                                var a = b.searchResult.Item, c = a.DetailPageURL,
                                    d = a.SmallImageUrl.replace("_80x80.jpg", "");
                                R.shareWeibo({
                                    url: c,
                                    title: "\u64e6\uff01\u5982\u610f\u6dd8\u771f\u662f\u8d2d\u7269\u795e\u5668\uff01\u770b\u5230\u5546\u54c1\u5c31\u80fd\u6bd4\u4ef7\uff0c\u4e0d\u6bd4\u4e0d\u77e5\u9053\uff0c\u4e00\u6bd4\u7701\u4e0d\u5c11\uff01\u521a\u7528@\u5982\u610f\u6dd8 \u67e5\u4e86\u201c" +
                                        a.Title + "\u201d\uff0c\uff08\u5b98\u65b9\u7f51\u7ad9\uff1ahttp://t.cn/aeDbuE\uff09",
                                    pic: d
                                })
                            }
                        });
                        g("#" + H("hy-pc-price-info")).delegate("." + H("hy-follow-price"), "click", function () {
                            db.sendLog("click_compare", g(this).attr("href"))
                        });
                        g("#" + H("huoyan-icon")).click(function () {
                            b.showPopup()
                        }).mouseenter(function () {
                            b.hideTimer && (b.mouseentered = !0, clearTimeout(b.hideTimer), b.hideTimer = sa)
                        }).mouseleave(function () {
                            b.mouseentered = !1;
                            b.hideTimer = setTimeout(function () {
                                b.hidePopup()
                            }, 0)
                        });
                        a && "function" == typeof a &&
                        a()
                    }
                })
            },
            filterPriceHistoryData: function (a, b) {
                var c = 0;
                if (a) {
                    for (var d = 0, e = 0, g = a.length; e < g; e++) a[e][0] *= 1E3, a[e][0] > d && (d = a[e][0]), null == a[e][1] && (a[e][1] = sa, c++);
                    c = new Date;
                    (g = b || "") || (g = a[a.length - 1][1]);
                    d = new Date(parseInt(d));
                    g && (c.getMonth() == d.getMonth() ? c.getDate() != d.getDate() && (a[e] = [c.getTime(), g]) : a[e] = [c.getTime(), g])
                }
                return a
            },
            renderPlot: function (a, b) {
                var c = b.Price.replace(/\uffe5|\s/g, ""), c = parseInt(c);
                if ((a = this.filterPriceHistoryData(a, c)) && 0 < a.length) {
                    var d = g("#" + H("hy-price-curve-plot")),
                        e = this;
                    try {
                        this.drawPlot(a, d)
                    } catch (m) {
                        R.console.debug("draw plot error: " + m.message), setTimeout(function () {
                            try {
                                e.drawPlot(a, d)
                            } catch (b) {
                                R.console.debug("draw plot error again: " + b.message)
                            }
                        }, 0)
                    }
                    var c = this.getPrice(a, "max"), p = this.getPrice(a, "min");
                    this.setPrices(p, c, b.nid)
                }
            },
            getPrice: function (a, b) {
                for (var c = [], d = 0, e = a.length; d < e; d++) a[d][1] && c.push(a[d][1]);
                return Math[b].apply(null, c)
            },
            setPrices: function (a, b, c) {
                a = this.getPriceInfoTemplate(this.formatNum(a), this.formatNum(b), c);
                g("#" + H("hy-pc-price-info")).html(a)
            },
            drawPlot: function (a, b) {
                !g.plot && "function" == typeof R.loadFlot && (g.plot = R.loadFlot());
                var c = new Date, d = c.getTime();
                c.setMonth(c.getMonth() - 3);
                c.setDate(c.getDate() - 1);
                var c = c.getTime(), e = this.getPrice(a, "max"), m = this.getPrice(a, "min"), p;
                1 > e - m && (p = 2);
                d = {
                    series: {
                        lines: {show: !0, lineWidth: 1},
                        points: {show: !0, radius: 2, lineWidth: 0, fillColor: "#faaa2b"},
                        color: "#fab13c",
                        shadowSize: 1
                    },
                    grid: {
                        hoverable: !0,
                        backgroundColor: "#fff",
                        borderWidth: 1,
                        borderColor: "#d1e3ea",
                        tickColor: "#d1e3ea",
                        labelMargin: 8
                    },
                    xaxis: {
                        min: c,
                        max: d, mode: "time", timeformat: "%0m/%0d", tickSize: [15, "day"]
                    },
                    yaxis: {minTickSize: 5, tickDecimals: p, tickFormatter: this.formatNum}
                };
                try {
                    b.data("plot")
                } catch (q) {
                    R.console.debug("destroy plot error: " + q.message)
                }
                g.plot(b, [a], d)
            },
            showTip: function (a, b, c, d) {
                var e = this.getPriceCurveTipTemplate();
                g(document.body).append(e);
                b = "\u4ef7\u683c\uff1a" + b;
                g("#" + H("hy-current-point-date")).text("\u65e5\u671f\uff1a" + a);
                g("#" + H("hy-current-point-price")).text(b);
                var a = g("#" + H("hy-price-curve-tip")), b = a.outerWidth(), e = a.outerHeight(),
                    m = c - b / 2, p = (b - 8) / 2, q = document.documentElement.clientWidth;
                m + b > q && (m = q - b, p = b - (q - c) - 4);
                a.css({top: d - e - 15, left: m}).addClass(H("hy-tip-visible"));
                g("#" + H("hy-price-curve-arrow-down")).css("left", p)
            },
            hideTip: function () {
                g("#" + H("hy-price-curve-tip")).remove()
            },
            formatNum: function (a) {
                a = Math.round(100 * a) / 100;
                return a.toString().replace(/(\d)(?=(\d{3})+(?!\d))/g, "$1,")
            },
            getPriceCurveTipTemplate: function () {
                return '<div id="' + H("hy-price-curve-tip") + '" ><div id="' + H("hy-current-point-date") + '"></div><div id="' +
                    H("hy-current-point-price") + '"></div><div id="' + H("hy-price-curve-arrow-down") + '"></div></div>'
            },
            getPriceInfoTemplate: function (a, b, c) {
                return (c ? '<a class="' + H("hy-follow-price") + '" href="http://connect.etao.com/emailnotify/index.php?tb_lm_id=ryt_ext&nid=' + c + '" target="_blank" title="\u5173\u6ce8\u964d\u4ef7"></a>' : "") + '<div>\u6700\u9ad8\u4ef7\uff1a<span class="' + H("hy-highest-price") + '">\uffe5' + b + '</span></div><div>\u6700\u4f4e\u4ef7\uff1a<span class="' + H("hy-lowest-price") + '">\uffe5' + a + "</span></div>"
            }
        };
        X = document.body.getAttribute("data-ruyitao-uid");
        xa.constants.uid = X;
        document.body.removeAttribute("data-ruyitao-uid");
        (new xa.filterChain(xa.SearchBox.App, xa.sameBookAssist, xa.productSearch)).run();
        xa.SrpCompare.init();
        xa.PriceCurve.init();
        -1 != document.location.href.indexOf("ruyi.taobao.com") && document.getElementById("test-links") && (document.getElementById("test-links").className = "")
    }
})(window);
